力扣hot100 打家劫舍 DP 滚动数组

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

Problem: 198. 打家劫舍
力扣hot100 打家劫舍 DP 滚动数组,力扣 hot100,leetcode,算法,职场和发展

思路

👨‍🏫 参考地址
力扣hot100 打家劫舍 DP 滚动数组,力扣 hot100,leetcode,算法,职场和发展

复杂度

时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( n ) O(n) O(n)

💖 Code

class Solution {
	public static int rob(int[] nums)
	{
		int n = nums.length;
		if (n == 1)
			return nums[0];
		int[] f = new int[n + 1];//f[i] 表示在前 i 间房屋里能偷窃到的 最大 金额
//		初始化
		f[0] = 0;//偷 0 家金额为 0
		f[1] = nums[0];
//		状态转移
		for (int i = 2; i <= n; i++)
//							 偷当前家                      不偷当前家
			f[i] = Math.max(f[i - 2] + nums[i-1], f[i - 1]);
		return f[n];
	}
}

💖 DP空间优化版

空间复杂度: O ( 1 ) O(1) O(1)文章来源地址https://www.toymoban.com/news/detail-803507.html

public int rob(int[] nums) {
    int prev = 0;
    int curr = 0;

    // 每次循环,计算“偷到当前房子为止的最大金额”
    for (int i : nums) {
        // 循环开始时,curr 表示 dp[k-1],prev 表示 dp[k-2]
        // dp[k] = max{ dp[k-1], dp[k-2] + i }
        int temp = Math.max(curr, prev + i);
        prev = curr;
        curr = temp;
        // 循环结束时,curr 表示 dp[k],prev 表示 dp[k-1]
    }

    return curr;
}

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

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

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

相关文章

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

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

    2024年02月16日
    浏览(61)
  • 动态规划day09(打家劫舍,树形dp)

    目录 198.打家劫舍 看到题目的第一想法 看到代码随想录之后的想法 自己实现过程中遇到的困难 213.打家劫舍II 看到题目的第一想法 看到代码随想录之后的想法 自己实现过程中遇到的困难 337.打家劫舍 III(树形dp) 看到题目的第一想法 看到代码随想录之后的想法 自己实现过程中

    2024年01月23日
    浏览(93)
  • 【动态规划】简单多状态dp问题(1)打家劫舍问题

    打家劫舍问题 传送门:面试题 17.16. 按摩师 题目: 1.1 题目解析 越难的dp问题,看示例只能起到了解题目的效果,一般推不出啥普遍的规律,所以接下来就是我们的算法原理,通过动归的思想去理解,才会豁然开朗! 1.2 算法原理 1.2.1 状态表示 我们需要通过经验 + 题目要求去

    2024年02月12日
    浏览(42)
  • 【算法】树形DP ② 打家劫舍Ⅲ(树上最大独立集)

    最大独立集 需要从图中选择尽量多的点,使得这些点互不相邻。 337. 打家劫舍 III 用一个数组 int[] = {a, b} 来接收每个节点返回的结果 。返回值{a,b} a表示没选当前节点的最大值,b表示选了当前节点的最大值。 使用 后序遍历 dfs。 ( 发现树形 DP 基本都是后序 dfs ) P1352 没有上

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

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

    2024年01月21日
    浏览(54)
  • 【LeetCode热题100】198. 打家劫舍(动态规划)

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

    2024年04月11日
    浏览(46)
  • 【LeetCode动态规划#11】打家劫舍系列题(涉及环结构和树形DP的讨论)

    力扣题目链接(opens new window) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非

    2023年04月21日
    浏览(37)
  • 【动态规划】12简单多状态dp问题_打家劫舍II_C++ (medium)

    题目链接:leetcode打家劫舍II 目录 题目解析: 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目让我们求 在不触动警报装置的情况下  ,能够偷窃到的最高金额。 由题可得: 第一个房屋和最后一个房屋是紧挨着的 如果两间相邻的房屋在同一晚

    2024年02月02日
    浏览(47)
  • 力扣爆刷第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)
  • 算法刷题Day 48 打家劫舍+打家劫舍II+打家劫舍III

    分成两段来处理:比如说输入的长度是n(0~n-1),就分成[0, n - 1)和[1, n)两部分 写一个辅助函数,返回两个状态,抢或者不抢能得到的最大收获。

    2024年02月16日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包