leetcode做题笔记198. 打家劫舍

编程入门 行业动态 更新时间:2024-10-12 05:54:21

leetcode做题笔记198. <a href=https://www.elefans.com/category/jswz/34/1758562.html style=打家劫舍"/>

leetcode做题笔记198. 打家劫舍

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

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

思路一:动态规划

c语言解法

int rob(int* nums, int numsSize){if (numsSize == 1) {return nums[0];}int dp[numsSize];dp[0] = nums[0];dp[1] = fmax(nums[0],nums[1]);for(int i = 2;i<numsSize;i++){dp[i] = fmax(dp[i-1],dp[i-2]+nums[i]);}return dp[numsSize-1];
}

c++解法

class Solution {
public:int rob(vector<int>& nums) {if (nums.empty()) {return 0;}int size = nums.size();if (size == 1) {return nums[0];}vector<int> dp = vector<int>(size, 0);dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);for (int i = 2; i < size; i++) {dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);}return dp[size - 1];}
};

分析:

本题算动态规划的一道经典例题,理解前后关系后利用动态规划可解决,状态方程为  dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);即后一位所能偷的最大金额为前一位的最大金额和前两位的最大金额加上当前金额,可依据此题求解其他相似类型的题如:打家劫舍Ⅱ等

总结:

本题考察动态规划的应用,利用动态规划将前一天的最大金额作为求解下一天的条件得到答案,除此之外还可用记忆化递归来进行查找

更多推荐

leetcode做题笔记198. 打家劫舍

本文发布于:2023-12-05 20:23:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1665198.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:打家劫舍   做题   笔记   leetcode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!