Longest Increasing Subsequence
Input: [10,9,2,5,3,7,101,18]
Output: 4
Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4. class Solution {
public int lengthOfLIS(int[] nums) {
if(nums == null || nums.length == 0)
return 0;
List<Integer> list = new ArrayList<>();
list.add(nums[0]);
for(int i = 1; i < nums.length;i++){
if(list.get(0) >= nums[i]){
list.set(0,nums[i]);
}
else if(list.get(list.size()-1) <= nums[i]){
list.add(nums[i]);
}
else{
list.set(binarySearch(list,nums[i]),nums[i]);
}
}
return list.size();
}
public int binarySearch(List<Integer> list, int target){
int start = 0, end = list.size() -1;
while(start + 1 < end){
int mid = start + (end - start) / 2;
if(list.get(mid) >= target){
end = mid;
}else{
start = mid;
}
}
return end;
}
}Last updated