代码如下:
/**
*
* 动态规划
*
* dp值得含义代表,以当前节点为末尾,前面构成的严格递增子数组的最大长度
*
* 依次遍历数组,每次遍历,都重头开始遍历到i位置
* 看是否满足严格递增,在这期间更新此次遍历的最大值tmpMax
* 然后将tmpMax + 1(nums[i]自己本身) 赋值给此位置的dp
* 最后再更新结果最大值ans
*
* Code by java
*/
class Solution {
public int lengthOfLIS(int[] nums) {
int n = nums.length;
if(n < 2) return n;
int[] dp = new int[n];
dp[0] = 1;
int ans = dp[0];
for (int i = 1; i < n; i++) {
int tmpMax = 0; //此次遍历的最大值,用于更新当前的dp值
for (int j = 0; j < i; j++) { //再从头到i,依次判断是否满足严格递增,再更新当前的最大值tmpMax
if(nums[j] < nums[i]) {
tmpMax = Math.max(tmpMax, dp[j]);
}
}
dp[i] = tmpMax + 1; //加1,就是加上当前遍历的nums[i]自己
ans = Math.max(ans, dp[i]);
}
return ans;
}
// public static void main(String[] args) {
// int[] a = new int[] {10,9,2,5,3,7,101,18};
// Solution kk = new Solution();
// System.out.println(kk.lengthOfLIS(a));
// }
}