总体思想就是:
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