1. 程式人生 > >leetcode 300. Longest Increasing Subsequence 最長上升序列數

leetcode 300. Longest Increasing Subsequence 最長上升序列數

300. Longest Increasing Subsequence

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?

這道題是求陣列當中的最長的上升子序列。

可用使用動態規劃,用陣列res[i]表示到i 時的最長上升序列數,取在i前面比num[i]小的數的最長在上升序列來更新res[i],所以時間複雜度為 O(n2)。

    public int lengthOfLIS(int[] nums) {
        int[]  res=new int[nums.length];
        int max=0;
        for(int i=0;i<nums.length;i++){
            res[i]=1;
            for(int j=0;j<i;j++){
                if(nums[i]>nums[j])
                    res[i]=Math.max(res[i],res[j]+1);
            }
            max=Math.max(max,res[i]);
        }
        return max;
    }