首页 > 其他 > 详细

动态规划题目

时间:2021-05-09 23:37:02      阅读:27      评论:0      收藏:0      [点我收藏+]

记录一些简单的动态规划题目,待发现解题规律和方法

1、最长递增子序列

leetcode300题
题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。
例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

    public static int getMaxLength(int nums[]) {
        int len = nums.length;
        if (len < 2) return len;

        int[] dp = new int[len];
        Arrays.fill(dp, 1);
        int ans = 1;

        for (int i = 0; i < len; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[j] < nums[i]) dp[i] = Math.max(dp[i], dp[j] + 1);
            }
            ans = Math.max(ans, dp[i]);
        }

        return ans;
    }

2、找零钱问题

leetcode322题
题目描述:给定不同面额的硬币 coins 和一个总金额 amount。
编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

你可以认为每种硬币的数量是无限的。

    public static int giveChange(int[] coins, int target) {

        if (target <= 0) return -1;

        int[] dp = new int[target + 1];
        for (int i = 0; i < dp.length; i++) {
            dp[i] = i;
        }

        for (int i = 1; i <= target; i++) {
            for (int coin : coins) {
                if (i - coin < 0) continue;
                dp[i] = Math.min(dp[i], dp[i - coin] + 1);
            }
        }

        return dp[target];
    }

动态规划题目

原文:https://www.cnblogs.com/wsd413/p/14749058.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!