leetcode198 打家劫舍

2024-06-16 23:52
文章标签 打家劫舍 leetcode198

本文主要是介绍leetcode198 打家劫舍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路

有点像走楼梯,只是考虑相邻,也就是说你打算偷a[i],那你就不能偷a[i-1]的,然后可以递归的想。
如果money[i]表示第i个房间的钱,sum[i]表示此时在第i个房间一共偷到的最多的钱
错误公式
sum[i] = sum[i-1] + money[i]; 就是隔着偷

最后只需要计算最后两个就可以了
1 2 3 4 计算 (1+3 =4 )<( 2+4 =6)
但是也可以偷第1家(1)第4家(4)=5 啊,这个也是满足条件的
比如这个例子:
100 7 2 9 5 最大值是 100+9 =109
即 sum[i] = sum[i-2] +money[i];
那还会不会隔更多呢,不会的

比如 1 2 3 4 5 可以计算5 + 1, 但是5+1 一定不会是最大。因为你可以5+3+1,即 你在计算sum[3]的时候已经计算了1+3

正确公式
sum[i] = max(sum[i-1], sum[i-2])

代码

 public int rob(int[] nums) {if (nums.length == 1){return nums[0];}if (nums.length == 2) {return Math.max(nums[0], nums[1]);}int[] a = new int[3];//为了节省空间a[0] = nums[0];a[1] = nums[1];a[2] = nums[2]+nums[0];int cnt = 0;for (int i = 3; i< nums.length;i++){cnt = Math.max(a[0],a[1])+ nums[i];a[0] = a[1];a[1] = a[2];a[2] = cnt; }return Math.max(a[1],a[2]);
}

这篇关于leetcode198 打家劫舍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067912

相关文章

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

每日一题,力扣leetcode Hot100之198.打家劫舍

这一道题乍一看可以双层循环暴力解,但是仔细一想有可能最大利益并不是一家隔着一家偷,我可以间隔很多家偷,所以 这个题的思路还是有点像爬楼梯,用动态规划解。 首先确立动态规划的初始条件: 1.dp[0]=nums[0]只有一家 2.dp[1]=max(nums[0],nums[1])有两家选一家多的 然后确立动态规划的循环条件: dp[i]应该是什么 1.第i家能拿,那么dp[i]=n

LeetCode讲解篇之213. 打家劫舍 II

文章目录 题目描述题解思路题解代码 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷

leetcode198打家劫舍

打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 public int rob(int[] nums) {if(nums.length

代码随想录Day39:198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198. 打家劫舍 题目链接:LeetCode198.打家劫舍 文档讲解:代码随想录LeetCode198.打家劫舍 题解 dp[i]偷或不偷,取决于dp[i-1]和dp[i-2]是否偷 class Solution {public:int rob(vector<int>& nums) {if (nums.size() == 1)return nums[0];vector<i

代码随想录算法训练营第三十九天 | 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

目录 198.打家劫舍 思路 1.确定dp数组(dp table)以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一: 动态规划-一维 方法二:动态规划-二维 方法三:动态规划-两个变量 213.打家劫舍II 思路 方法一:动态规划- 方法二:动态规划-二维 方法三:动态规划-不封装函数  337.打家劫舍III

day 39 代码随想录 | 打家劫舍 动态规划

198.打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1:输入:[1,2,3,1]输出:4 这题其实就是一个动态规划的题,经典

【代码随想录训练营第42期 Day39打卡 - 打家劫舍问题 - LeetCode 198.打家劫舍 213.打家劫舍II 337.打家劫舍III

目录 一、做题心得 二、题目与题解 题目一:198.打家劫舍 题目链接 题解:动态规划 题目二:213.打家劫舍II 题目链接 题解:动态规划  题目三:337.打家劫舍III 题目链接 题解:动态规划 三、小结 一、做题心得 今天是打家劫舍的一天,来到了动态规划章节的Part7。打家劫舍问题是动态规划算法很经典的一个应用,今天将从三道题目对其进行探讨。

代码随想录算法训练营第三十九天|198.打家劫舍、

题目链接:198. 打家劫舍 - 力扣(LeetCode) 思路:因为隔一家才能取,所以当前最大的价值要么是dp[i-2] + nums[i] 或者是 dp[i-1] class Solution(object):def rob(self, nums):""":type nums: List[int]:rtype: int"""dp = [0] * len(nums)if (len(nums)

24暑假算法刷题 | Day39 | 动态规划 VII | LeetCode 198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

目录 198. 打家劫舍题目描述题解 213. 打家劫舍 II题目描述题解 337. 打家劫舍 III题目描述题解 打家劫舍的一天 😈 198. 打家劫舍 点此跳转题目链接 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动