• 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;
        }
    }
    
  • 相关阅读:
    Linux 文本编辑器 vim
    Redis 学习(一)
    Linux服务管理
    Linux系统管理
    Linux文件系统管理
    深入解析 composer 的自动加载原理 (转)
    Composer 的学习
    GBDT算法简述
    随机森林入门与实战
    主成分分析PCA
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13690810.html
Copyright © 2020-2023  润新知