力扣-300-最长上升子序列

题目:
300. Longest Increasing Subsequence(medium)


解题思路:
一维dp模板题
labuladong题解
一种O(N^2)常规解法;一种二分查找O(NlogN)解法。


代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
O(N^2)解法:
public int lengthOfLIS(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int[] dp = new int[nums.length];//以 nums[i] 这个数结尾的最长递增子序列的长度
Arrays.fill(dp,1);
for(int i = 0;i<nums.length;i++){
for(int j = 0;j<i;j++){
if(nums[i] > nums[j]){ //找比当前数字小的数的子序列
dp[i] = Math.max(dp[i],dp[j]+1);
}
}
}

int res = 0;
for(int i = 0;i<dp.length;i++){
res = Math.max(res,dp[i]);
}

return res;
}