总体思想就是:
For example, if
nums = [5,6,7,1,2,8,3,4,0,5,9]
then after we prcoess the 7:
S = [5,6,7]
after w process the 2:
S = [1,2,7]
after we process the 8:
S = [1,2,7,8]
Then we process the 3:
S = [1,2,3,8]
We process the 4:
S = [1,2,3,4]
and now the next three lements:
S = [0,2,3,4,5,9]
如果不想使用另外一个数组,则可以使用给定数组的前n个位置。
public class Solution {
public int lengthOfLIS(int[] nums) {
int len=nums.length,pos=0;
if(nums == null || nums.length==0){
return 0;
}
int[] ret = new int[len];
ret[0] = nums[0];
pos++;
for(int i=1;i<len;i++){
if(nums[i]>ret[pos-1] ){
ret[pos++]=nums[i];
}else if(nums[i]<ret[0] ){
ret[0]=nums[i];
}else{
int des=binarySearch(ret,pos,nums[i] );
ret[des]=nums[i];
}
}
return pos;
}
private int binarySearch(int[] num,int len,int target){
int low=0,high=len-1;
while(low<=high){
int mid=low+(high-low)/2;
if(num[mid] == target){
return mid;
}else if(num[mid] < target ){
low=mid+1;
}else{
high=mid-1;
}
}
return low;
}
}
参考网址:https://leetcode.com/discuss/89066/short-c-stl-based-solution-o-log-time-space-with-explanation