力扣LCR 166. 珠宝的最高价值(java 动态规划)

这篇具有很好参考价值的文章主要介绍了力扣LCR 166. 珠宝的最高价值(java 动态规划)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Problem: LCR 166. 珠宝的最高价值

解题思路

力扣LCR 166. 珠宝的最高价值(java 动态规划),力扣题目,leetcode,java,动态规划力扣LCR 166. 珠宝的最高价值(java 动态规划),力扣题目,leetcode,java,动态规划

思路

改题目与本站64题实质上是一样的,该题目在64题的基础上将求取最小路径和改成了求取最大路径和。具体实现思路如下:

1.定义一个int类型的二维数组dp大小为给定矩阵frame的行数与列数。该数组用于记录每个当前阶段的最大路径和(也是本题目的最大价值)
2.动态转移方程为**dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + frame[i][j];**即当前位置(也可以记作阶段)最大值每次取出其上方,和左侧的较大值的一个与当前frame位置值作和;
3.由于dp数组中第一行与第一列无法直接执行动态转移方程,要对其初始化:第一行每个位置值为依次向右累加第一列每个位置值为依次向下累加
3.最后返回dp数组中的最后一个值即可。

解题方法

1.定义数组frame的行数rows与列数columns;并定义一个int变量temp用于记录累加和
2.定义并初始化int类型数组dp初始化为new int[rows][colunms]
3.初始化dp的第一行与第一列,在for循环中使temp依次累加当前第一行(列)位置的值,并赋值给当前dp数组位置;
4.从dp数组的第二行(索引为1)开始执行动态转移方程dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + frame[i][j];,最后返回dp[rows - 1][columns - 1];

复杂度

时间复杂度:

O ( M N ) O(MN) O(MN),其中 M M M为数组frame的行数, N N N为其列数

空间复杂度:

O ( M N ) O(MN) O(MN)文章来源地址https://www.toymoban.com/news/detail-791457.html

Code

class Solution {
    /**
     * The maximum path sum is obtained using dynamic programming
     *
     * @param frame Given matrix
     * @return int
     */
    public int jewelleryValue(int[][] frame) {
        int rows = frame.length;
        int columns = frame[0].length;
        int temp = 0;
        //Records the current maximum path sum
        int[][] dp = new int[rows][columns];
        //Handle the first row and column
        for (int i = 0; i < columns; ++i) {
            temp += frame[0][i];
            dp[0][i] = temp;
        }
        temp = 0;

        for (int j = 0; j < rows; ++j) {
            temp += frame[j][0];
            dp[j][0] = temp;
        }

        //Dynamic transfer equation
        for (int i = 1; i < rows; ++i) {
            for (int j = 1; j < columns; ++j) {
                dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + frame[i][j];
            }
        }
        return dp[rows - 1][columns - 1];
    }
}

到了这里,关于力扣LCR 166. 珠宝的最高价值(java 动态规划)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 动态规划 剑指 Offer 47. 礼物的最大价值

     代码展示:         进行动态规划的五个步骤:         1.状态表示                 dp[i][j]表示从起点到[i][j]这个位置上能获得礼物的最大价值         2.状态转移方程                 我们分析距离[i][j]最近的位置,根据题意我们到达[i][j]位置只能从[i-1][j]向下移动或

    2024年02月13日
    浏览(34)
  • 整数拆分(力扣)动态规划 JAVA

    给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k = 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n = 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: n = 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 提示: 2 = n = 58 里程碑意义 解题思路:

    2024年02月17日
    浏览(33)
  • 最小路径和-力扣64-java 动态规划

    给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→1 的总和最小。 示例 2: 输入:grid = [[1,

    2023年04月09日
    浏览(32)
  • 零钱兑换 II 力扣(动态规划) JAVA

    给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整数。 示例 1: 输入:amou

    2024年02月15日
    浏览(25)
  • 零钱兑换 II(力扣)动态规划 JAVA

    给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整数。 示例 1: 输入:amou

    2024年02月16日
    浏览(30)
  • 最大正方形(力扣)暴力 + 动态规划 JAVA

    在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。 示例 1: 输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]] 输出:4 示例 2: 输入:m

    2024年02月15日
    浏览(54)
  • 力扣198. 打家劫舍(java 动态规划)

    Problem: 198. 打家劫舍 1.构建多阶段决策模型:n个房屋对应n个阶段,每一个阶段决定一个房间是偷还是不偷,两种决策:偷、不偷 2.定义状态:不能记录每个阶段决策完之后,小偷可偷的最大金额,需要记录不同决策对应的最大金额,也就是:这个房屋偷-对应的最大金额;这

    2024年01月21日
    浏览(40)
  • 力扣70. 爬楼梯(动态规划 Java,C++解法)

    Problem: 70. 爬楼梯 由于本题目中第i层台阶只能由于第 i- 1 层台阶和第 i-2 层台阶走来,所以可以联想到动态规划,具体如下: 1.定义多阶段决策模型:对于每一上台阶看作一种状态; 2.定义状态转移方程:int[] dp = new int[n + 1] 用于记录第i个台阶可以走到的走法 ;dp[i] = dp[i -

    2024年01月20日
    浏览(30)
  • 力扣120. 三角形最小路径和(Java 动态规划)

    Problem: 120. 三角形最小路径和 Problem:64. 最小路径和 本题目可以看作是在上述题目的基础上改编而来,具体的思路: 1.记录一个int类型的大小的 n 乘 n n乘n n 乘 n 的数组(其中 n n n 为数组triangle的行数)用于记录 每一个当前阶段的最小路径和 2.大体上可以依据题意得出动态转移

    2024年01月22日
    浏览(29)
  • 力扣300:最长递增子序列(Java动态规划+双指针)

    给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。   示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包