力扣:198. 打家劫舍(Python3)

题目:

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

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

来源:力扣(LeetCode)

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 1:

输入:1,2,3,1

输出:4

解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

输入:2,7,9,3,1

输出:12

解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。 偷窃到的最高金额 = 2 + 9 + 1 = 12 。

解法:

动态规划,首先在nums头加入3个0,动态规划过程原地更新nums。

接着从nums第3个元素起更新到结束。考虑偷当前家的钱,就不能偷前一家的钱,但是可以偷前二家、前三家的钱,因为每家的钱都大于等于0,所以相邻4家必偷2家。所以更新nums,设当前位置为index,numsindex = numsindex + max(numsindex - 2, numsindex - 3)。

代码:

python 复制代码
class Solution:
    def rob(self, nums: List[int]) -> int:
        nums = [0, 0, 0] + nums
        for index in range(3, len(nums)):
            nums[index] = nums[index] + max(nums[index - 2], nums[index - 3])
        return max(nums[-2:])
相关推荐
GDAL31 分钟前
uv 完整教程:下一代 Python 包管理工具
python·uv
写代码写到手抽筋8 小时前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
曲幽8 小时前
FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好
python·fastapi·web·jwt·oauth2·user·authentication
xieliyu.8 小时前
Java算法精讲:双指针(二)
java·开发语言·算法
装不满的克莱因瓶8 小时前
掌握 RNN 与 LSTM 模型结构
人工智能·python·rnn·深度学习·神经网络·ai·lstm
何以解忧,唯有..8 小时前
Python包管理工具pip:从入门到精通
开发语言·python·pip
wayz118 小时前
Momentum:PSL(心理线指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
金銀銅鐵9 小时前
用 Tkinter 实现简单的猜数字游戏
后端·python
copyer_xyf9 小时前
Python 模块与包的导入导出
前端·后端·python
8Qi89 小时前
LeetCode 213:打家劫舍 II(House Robber II)—— 题解 ✅
算法·leetcode·职场和发展·动态规划