LeetCode 300. 最长递增子序列
@TOC
题目描述
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
示例:
输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。
提示:
1 <= nums.length <= 2500
-104 <= nums[i] <= 104
一、解题关键词
递增
子序列
顺序不变
二、解题报告
1.思路分析
- 动态规划经典题目,以当前元素为起点,下一个元素 选与不选的问题
- 声明动态方程
- 初始化
- 返回值默认值
- 一个循环便利所有元素
- 二个循环便利所有满足条件子序列
- 根据二层循环进行状态转移
- 找到最优解
2.时间复杂度
3.代码示例
class Solution {
public int lengthOfLIS(int[] nums) {
int len = nums.length;
int [] dp = new int[len];
Arrays.fill(dp,1);
int maxLen = 0;
for(int i = 0; i < len; i++){
for(int j = 0; j < i; j++){
if(nums[i] > nums[j]){
dp[i] = Math.max(dp[j] + 1, dp[i]);
}
}
maxLen = Math.max(maxLen,dp[i]);
}
return maxLen;
}
}
4.知识点
动态规划解题模板
1、声明动态方程
2、动态方程赋值
3、循环
4、状态转移
5、找到最优秀解
网友评论