lintcode(76)最长上升子序列

来源:互联网 发布:java服务器是什么 编辑:程序博客网 时间:2024/05/18 14:25

描述:

给定一个整数序列,找到最长上升子序列(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);        }    }}

0 0
原创粉丝点击