LeetCode 300 最长上升子序列

LeetCode 300 最长上升子序列

问题描述:
给定一个无序的整数数组,找到其中最长上升子序列的长度。

动态规划

执行用时:16 ms, 在所有 Java 提交中击败了24.49%的用户
内存消耗:36.5 MB, 在所有 Java 提交中击败了95.21%的用户

class Solution {
    public int lengthOfLIS(int[] nums) {
        //动态规划解法
        //1. dp[i]表示nums[0:i]中以nums[i]结尾的最长递增子序列长度  
        //2. dp[i]需要将nums[i]与之前的所有nums[j] (j<i)比较  
        //3. 若nums[j]<nums[i],则dp[i] = Math.max(dp[i], dp[j]+1)
        //4. 每个位置处以该元素为最小子序列的长度为1
        if(nums==null || nums.length==0) {
            return 0;
        }

        int[] dp = new int[nums.length];
        Arrays.fill(dp, 1);
        int ans = dp[0];
        for(int i=1; i<nums.length; i++) {
            for(int j=0; j<i; j++) {
                if(nums[i]>nums[j]) {
                    dp[i] = Math.max(dp[i], dp[j]+1);
                }
            }
            ans = Math.max(ans, dp[i]);
        }
        return ans;
    }
}
posted @ 2020-09-18 13:38  CodeSPA  阅读(93)  评论(0编辑  收藏  举报