Given an unsorted array of integers, find the length of longest increasing subsequence.
For example,Given [10, 9, 2, 5, 3, 7, 101, 18]
,The longest increasing subsequence is [2, 3, 7, 101]
, therefore the length is 4
. Note that there may be more than one LIS combination, it is only necessary for you to return the length.
Your algorithm should run in O(n2) complexity.
Follow up: Could you improve it to O(n log n) time complexity?
public class Solution { public int lengthOfLIS(int[] nums) { if (nums==null||nums.length==0) return 0; int temp[]=new int[nums.length]; temp[0]=nums[0]; int len=1; for(int i=1;i<nums.length;i++){ if(nums[i]>temp[len-1]){ temp[len]=nums[i]; len++; } else{ int pos=BinarySearch(temp,nums[i],len); temp[pos]=nums[i]; } } return len; }
private int BinarySearch(int[] datas,int key,int len){ int low=0; int high=len; while(low<=high){ int mid=(low+high)/2; if(datas[mid]>key) high=mid-1; else if(datas[mid]==key) return mid; else low=mid+1; } return low; } }
网友评论