news 2026/5/30 7:34:10

力扣 打家劫舍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣 打家劫舍

题目:

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

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

一、题目理解

给定一个数组nums,其中:

  • nums[i]表示第i间房子的金额

  • 相邻的房子不能同时抢

目标是:
在不触发警报的前提下,抢到最多的钱


二、为什么这是动态规划问题?

这是一个**典型的「选择 + 约束」问题:

  • 每一间房子只有两种选择:

    • 不抢

  • 选择当前房子,会影响后续选择(相邻不能抢)

这种「当前决策依赖之前结果」的结构,非常适合用动态规划(DP)


三、状态定义(关键)

定义:

dp[i] = 抢到第 i 间房子为止,能够获得的最大金额

注意:

  • dp[i] 不是「是否抢第 i 家」

  • 而是:在前 i 家房子中,能拿到的最大值


四、状态转移方程(核心)

考虑第i间房子,有两种情况:

情况 1:不抢第 i 间房

那么最大金额等于:dp[i-1]

情况 2:抢第 i 间房

  • 那第i-1间房一定不能抢

  • 上一个合法状态只能来自i-2

  • 那么最大金额等于:dp[i-2] + nums[i]

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

综合两种情况

dp[i] = max( dp[i-1], dp[i-2] + nums[i] )

这一步是整道题的灵魂


五、初始条件

dp[0] = nums[0] dp[1] = max(nums[0], nums[1])

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 20:58:25

Triton推理服务器部署微调后的模型及测试

使用Triton推理服务器部署微调后的模型&#xff0c;并通过基准测试&#xff08;如MMLU、GPQA&#xff09;验证模型效果。 把这个过程拆解为模型转换、Triton部署、基准测试三个核心步骤&#xff0c;给出可落地的操作指南和代码&#xff0c;确保你能一步步完成部署和验证。 一、…

作者头像 李华
网站建设 2026/5/29 20:12:29

探索:在微软工作是一种怎样的体验(六)

面试所需的长期准备基础知识这个不用多说&#xff0c;作为一名优秀的程序员必须要很好地掌握编程语言、数据结构、算法、数据库、操作系统、网络等基本功。刷题近些年来&#xff0c;刷力扣越来越流行。有很多童鞋会问&#xff0c;刷多少比较合适呢&#xff1f;当然是多多益善咯…

作者头像 李华
网站建设 2026/5/29 20:18:24

要让 SAP SD 销售订单行项目里的“重量”“毛重”等字段重新可编辑,99% 的情况都不是权限问题,而是系统标准逻辑

要让 SAP SD 销售订单行项目里的“重量”“毛重”等字段重新可编辑&#xff0c;99% 的情况都不是权限问题&#xff0c;而是系统标准逻辑&#xff1a;只要该行已经生成了交货单&#xff08;Delivery&#xff09;&#xff0c;这些属于「装运层」的字段就被自动锁掉&#xff0c;避…

作者头像 李华