方法一:
class Solution {
public int lengthOfLIS(int[] nums) {
if(nums==null || nums.length==0){
return 0;
}
int len=nums.length;
int[] dp=new int[len];
dp[0]=1;
for(int i=1;i<len;i++) {
int temp=1;
for(int j=0;j<i;j++) {
if(nums[i]>nums[j]) {
temp=Math.max(temp, dp[j]+1);
}
}
dp[i]=temp;
}
int max=0;
for(int i=0;i<len;i++) {
max=Math.max(max, dp[i]);
}
return max;
}
}
方法二:
二分查找(不会!!!)
class Solution {
public int lengthOfLIS(int[] nums) {
int len = 1, n = nums.length;
if (n == 0) {
return 0;
}
int[] d = new int[n + 1];
d[len] = nums[0];
for (int i = 1; i < n; ++i) {
if (nums[i] > d[len]) {
d[++len] = nums[i];
} else {
int l = 1, r = len, pos = 0; // 如果找不到说明所有的数都比 nums[i] 大,此时要更新 d[1],所以这里将 pos 设为 0
while (l <= r) {
int mid = (l + r) >> 1;
if (d[mid] < nums[i]) {
pos = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
d[pos + 1] = nums[i];
}
}
return len;
}
}