• 刷题84—动态规划(一)


    123.完全平方数

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/perfect-squares

    题目描述

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

    示例 1:

    输入: n = 12
    输出: 3
    解释: 12 = 4 + 4 + 4.
    示例 2:

    输入: n = 13
    输出: 2
    解释: 13 = 4 + 9.

    题目分析

    1. 初始化长度为n+1的数组,每个位置都以0填充。
    2. 遍历数组,每个数组的下标为i,以i为个数最大的结果,即dp[i] = i;
    3. 动态转移方程:dp[i] = Math.min(dp[i], dp[i-j*j]+1);  j*j为平方数;
    /**
     * @param {number} n
     * @return {number}
     */
    var numSquares = function(n) {
        let dp = new Array(n+1).fill(0);
        for(let i=0; i<=n; i++){
            dp[i] = i;
            for(let j=1; i-j*j>=0; j++){
                dp[i] = Math.min(dp[i], dp[i-j*j]+1);
            }
        }
        return dp[n];
    };
    

    124.最长上升子序列

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-increasing-subsequence

    题目描述

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

    示例:

    输入: [10,9,2,5,3,7,101,18]
    输出: 4
    解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
    说明:

    可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
    你算法的时间复杂度应该为 O(n2) 。

    题目分析

    1. 初始化长度为n+1的数组,每个位置都以1填充;
    2. 定义max存放最长上升子序列的长度,并赋值为0;
    3. 令dp[i]表示以nums[i]为当前最长上升子序列的长度;
    4. 因为新的dp[i](用dp[j]表示)的最长上升子序列的长度取决于nums[i]这个新的尾元素(用nums[j]表示),所以比较nums[i]和nums[j]的大小;
    5. 若nums[j] < nums[i],那么dp[i] = Math.max(dp[i], dp[j]+1);
    6. 比较max和dp[i],取较大的值为最长上升子序列的长度。
    /**
     * @param {number[]} nums
     * @return {number}
     */
    var lengthOfLIS = function(nums) {
       let len = nums.length;
       let max = 0;
       if(len === 0) return 0;
       let dp = new Array(len+1).fill(1);
       for(let i=0; i<len; i++){
           for(let j=0; j<i; j++){
               if(nums[j] < nums[i]){
                   dp[i] = Math.max(dp[i], dp[j]+1)
               }
           }
           max = Math.max(max, dp[i]);
       }
       return max;
    };
    

      

  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12770341.html
Copyright © 2020-2023  润新知