描述:
给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。
样例:
给出 [5,4,1,2,3]
,LIS 是 [1,2,3]
,返回 3
给出 [4,2,4,5,3,7]
,LIS 是 [2,4,5,7]
,返回 4
思路:
可以画树状图来分析,主要思路就是递归,一个数有两种选择,进入结果数组和不进入结果数组,返回两条分支的最大值。
public class Solution {
/**
* @param nums: The integer array
* @return: The length of LIS (longest increasing subsequence)
*/
public int longestIncreasingSubsequence(int[] nums) {
// write your code here
if(nums == null || nums.length == 0){
return 0;
}
int result = search(nums , 0 , 0 , Integer.MIN_VALUE) ;
return result;
}
public int search(int[] nums , int start , int count , int current){
if(start == nums.length){
return count;
}
if(current < nums[start]){
return Math.max(search(nums , start + 1 , count + 1 , nums[start]) , search(nums , start + 1 , count , current));
}else{
return search(nums , start + 1 , count , current);
}
}
}