198. House Robber
初始化变量:我们有三个变量 遍历房子数组:对于每一个房子,我们进行以下操作: 返回结果:遍历结束后,
发布日期:2025-06-07 21:05:10
浏览次数:3
分类:精选文章
本文共 1009 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到一种方法来抢劫房子,使得在不触发警报的情况下,抢到的钱数最大化。相邻房子如果同时被抢,会报警。因此,我们需要找到一种策略,使得抢劫的房子不会相邻。
方法思路
这个问题可以通过动态规划来解决,具体来说,我们可以使用三个变量来表示不同的抢劫状态:
robLast表示抢劫当前房子时,前一个房子没有被抢劫的钱数。notRobLast表示前一个房子没有被抢劫时,当前房子被抢劫的钱数。maxMoney表示到当前房子为止,抢劫的总钱数。
对于每一个房子,我们有两种选择:抢劫它或者不抢劫它。抢劫它的话,我们只能加上前一个房子没有被抢劫的钱数;不抢劫它的话,我们可以选择抢劫前一个房子或者不抢劫前一个房子,取其中的最大值。
通过遍历每个房子并更新这三个变量,我们可以在每一步找到最优的抢劫策略。
解决代码
public class Solution { public int rob(int[] nums) { if (nums.length == 0) return 0; int robLast = 0, notRobLast = 0, maxMoney = 0; for (int i = 0; i < nums.length; i++) { maxMoney = Math.max(robLast, notRobLast + nums[i]); notRobLast = robLast; robLast = maxMoney; } return maxMoney; }} 代码解释
robLast、notRobLast 和 maxMoney,分别初始化为0。maxMoney被更新为当前房子如果抢劫的钱数(加上前一个房子没抢劫的钱数)和当前房子不抢劫但前一个房子抢劫的钱数中的最大值。notRobLast被更新为robLast的旧值。robLast被更新为maxMoney,即当前房子的最佳抢劫策略。
maxMoney 中存储了最大的抢劫钱数。这种方法的时间复杂度是 O(n),空间复杂度是 O(1),非常高效。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2026年06月18日 01时59分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php 浮点型计算精度问题
2023-02-28
php 特定时间段统计,jpgraph某个时间段的数据统计
2023-02-28
php 生成csv mac下乱码
2023-02-28
php 生成证书 签名及验签
2023-02-28
PHP 的标准输入与输出
2023-02-28
php 笔记 (早前的,很乱)
2023-02-28
PHP 第一天
2023-02-28
Redis使用量暴增,快速定位有哪些大key在作怪
2023-02-28
PHP 统计数据功能 有感
2023-02-28
SpringBoot处理JSON数据
2023-02-28
PHP 输入输出流合集
2023-02-28
php-兔子问题,斐波那契数列
2023-02-28
php-约瑟夫问题
2023-02-28
php.ini中常见的配置信息选项
2023-02-28
php.ini配置中有10处设置不当,会使网站存在安全问题
2023-02-28
PHP7 新特性
2023-02-28
PHP7+MySQL5.7+Nginx1.9. on Ubuntu 14.0
2023-02-28
php7.1.6 + redis
2023-02-28
php7中使用php_memcache扩展
2023-02-28