Leetcode--213. 打家劫舍Ⅱ
不偷第一个房屋,这样我们可以从第二个房屋开始偷,直到最后一个房屋。 不偷最后一个房屋,这样我们可以从第一个房屋开始偷,直到倒数第二个房屋。 边界条件处理:处理数组长度为0、1、2的情况,分别返回相应结果。 情况一:房子0不被偷,计算房子1到房子n-1的最大金额。 情况二:房子n-1不被偷,计算房子0到房子n-2的最大金额。 动态规划计算:分别使用动态规划方法计算两种情况的最大金额。 结果比较:返回两种情况中的最大值作为最终结果。
发布日期:2021-04-30 21:01:45
浏览次数:108
分类:精选文章
本文共 1509 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要在不触动警报装置的情况下,偷窃沿街房屋中的现金。房屋围成一圈,相邻房屋之间有防盗系统,如果同时被偷会报警。我们需要找到偷窃的最大金额。
方法思路
这个问题可以通过动态规划来解决。我们需要考虑两种情况:
对于每种情况,我们使用动态规划来计算最大金额。动态规划的方法是从当前房屋的最大金额和前一房屋的最大金额中选择较大的那个,以确保不触动报警装置。
解决代码
public class Solution213 { public static int rob(int[] nums) { int n = nums.length; if (n == 0) return 0; if (n == 1) return nums[0]; if (n == 2) return Math.max(nums[0], nums[1]); int max1 = 0; int current1 = nums[1]; int prev1 = 0; max1 = current1; for (int i = 2; i < n - 1; i++) { int temp = Math.max(current1, prev1 + nums[i]); prev1 = current1; current1 = temp; if (current1 > max1) { max1 = current1; } } int max2 = 0; int current2 = nums[n - 2]; int prev2 = 0; max2 = current2; for (int i = n - 3; i >= 0; i--) { int temp = Math.max(current2, prev2 + nums[i]); prev2 = current2; current2 = temp; if (current2 > max2) { max2 = current2; } } return Math.max(max1, max2); } public static void main(String[] args) { int[] nums = {4, 1, 2}; System.out.println(rob(nums)); }} 代码解释
这种方法确保了我们能够在不触动报警装置的情况下,偷窃到最多的金额。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2026年06月12日 11时55分01秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Pip 安装失败:需要 SSL
2023-03-02
Pip 安装挂起
2023-03-02
pip 或 pip3 为 Python 3 安装包?
2023-03-02
pip 无法从 requirements.txt 安装软件包
2023-03-02
pip/pip3更换国内源
2023-03-02
pip3 install PyQt5 --user 失败
2023-03-02
pip3命令全解析:Python3包管理工具的详细使用指南
2023-03-02
PIPE 接口信号列表
2023-03-02
pipeline配置与管理Job企业级实战
2023-03-02
pipeline项目配置实战
2023-03-02
Pipenv 与 Conda?
2023-03-02
QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
2023-03-02
pipy国内镜像的网址
2023-03-02
quiver绘制python语言
2023-03-02
pip下载缓慢
2023-03-02
PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
2023-03-02