力扣198. 打家劫舍(java 动态规划)

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

Problem: 198. 打家劫舍

题目描述

力扣198. 打家劫舍(java 动态规划),力扣题目,动态规划,leetcode,java力扣198. 打家劫舍(java 动态规划),力扣题目,动态规划,leetcode,java

思路

1.构建多阶段决策模型:n个房屋对应n个阶段,每一个阶段决定一个房间是偷还是不偷,两种决策:偷、不偷
2.定义状态:不能记录每个阶段决策完之后,小偷可偷的最大金额,需要记录不同决策对应的最大金额,也就是:这个房屋偷-对应的最大金额;这个房屋不偷-对应的最大金额。int[n][2]记录每个阶段的状态,dp[i][0]表示第i个物品不偷,当下剩余的最大金额;dp[i][1]表示第i个物品偷,当下剩余的最大金额;
3.定义状态转移方程:dp[i][0] = max(dp[i - 1][0], dp[i - 1][1])即表示假设不偷则当前阶段可以获得的最大值为上一个房屋偷或者不偷的二者中的最大金额;dp[i][1] = dp[i - 1][0] + nums[i]即表示假设当前阶段偷则当前可以获得的最大金额为上一个房屋不偷加上当前当前房屋的金额

解题方法

1.获取nums数组的长度为n;并定义int类型数组dp:int[][] dp = new int[n][2];
2.初始化dp[0][0]为0,dp[0][1]为nums[0];
3.完成动态转移方程;
4.返回max(dp[n - 1][0], dp[n - 1][1])

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为数组nums的长度

空间复杂度:

O ( n ) O(n) O(n)文章来源地址https://www.toymoban.com/news/detail-809875.html

Code

class Solution {
    /**
     * Get the maximum amount
     *
     * @param nums Given array(Store the amount of each house)
     * @return int
     */
    public int rob(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        int n = nums.length;
        int[][] dp = new int[n][2];
        //dp[i][0] represents the maximum amount
        // that can currently be obtained without stealing
        dp[0][0] = 0;
        //dp[i][1] represents the maximum amount
        // that can be obtained when not stealing
        dp[0][1] = nums[0];
        for (int i = 1; i < n; ++i) {
            dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1]);
            dp[i][1] = dp[i - 1][0] + nums[i];
        }
        return Math.max(dp[n - 1][0], dp[n - 1][1]);
    }
}

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

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

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

相关文章

  • 力扣 198.打家劫舍【中等】

    题目来源:力扣(LeetCode)https://leetcode.cn/problems/house-robber 题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

    2024年02月16日
    浏览(61)
  • 力扣爆刷第77天--动态规划一网打尽打家劫舍问题

    力扣爆刷第77天–动态规划一网打尽打家劫舍问题 一、198.打家劫舍 题目链接:https://leetcode.cn/problems/house-robber/ 思路:小偷不能连续两家偷,由此可以定义dp[i]表示,小偷经过[0,i]所能获取到的最大金额,那么我们可以得到递推公式: dp[i] = Math.max(dp[i-1], dp[i-2]+nums[i]); 即如果偷

    2024年02月22日
    浏览(48)
  • Java 动态规划 Leetcode 213. 打家劫舍 II

    代码展示:         该题其实是Java 动态规划 面试题 17.16. 按摩师的变种,增加了一个首尾是相邻的条件,而我们解决该题也要用到链接的这道题的思想,可以先去看一下上面这篇博客 此题可以采用动态规划的方法进行解决,根据解决动态规划题目的5大步骤进行逐步分析

    2024年02月13日
    浏览(40)
  • 算法训练第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

    题目链接:198.打家劫舍 参考:https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入

    2023年04月16日
    浏览(39)
  • 198. 打家劫舍

    198. 打家劫舍 https://leetcode.cn/problems/house-robber/description/

    2024年01月20日
    浏览(43)
  • _198打家劫舍

    _198打家劫舍 https://leetcode.cn/problems/house-robber/submissions/496496112/

    2024年01月18日
    浏览(44)
  • LC198. 打家劫舍

     代码随想录

    2024年01月21日
    浏览(67)
  • LeetCode198.打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组, 计算你 不触动

    2024年03月12日
    浏览(89)
  • LeetCode - 198 打家劫舍

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 198. 打家劫舍 - 力扣(LeetCode) 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在

    2023年04月08日
    浏览(32)
  • 动态规划_打家劫舍(Ⅰ~Ⅲ)

    打家劫舍系列 返回最大金额 不能同时取相邻两个数 数组数据全部非负 ①dp数组含义 dp[i]表示前i个数中按规则取出的最大总和 ②递推公式 dp[i]=max(dp[i-1],dp[i-2]+nums[i]) 当前最优可以从两个状态推出(前提是前面已经为最优解): 1° 前一个数未取:则当前数取了,则总和最大

    2024年02月03日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包