算法---LeetCode 198. 打家劫舍

news/2024/11/28 5:41:34/

1. 题目

原题链接

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上
被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 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 。

提示:

1 <= nums.length <= 100
0 <= nums[i] <= 400

2. 题解

2.1 解法1: 动态规划

  1. 状态数组: dp[i], 表示前 i 间房屋能偷窃到的最高总金额
  2. 递推方程: dp[i]= Math.max(dp[i-2]+nums[i],dp[i-1])
  3. 边界及初始化: dp[0]=nums[0], dp[1]=Math.max(nums[0], nums[1])

    class Solution {public int rob(int[] nums) {if (nums.length == 0) return 0;if (nums.length == 1) return nums[0];int[] dp = new int[nums.length + 1];dp[0] = 0;dp[1] = nums[0];for (int i = 2; i <= nums.length; i++) {dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]);}return dp[nums.length];}}

写法2:

    class Solution {public int rob(int[] nums) {if (nums.length == 0) return 0;if (nums.length == 1) return nums[0];int[] dp = new int[nums.length];dp[0] = nums[0];dp[1] = Math.max(nums[0], nums[1]);for (int i = 2; i < nums.length; i++) {dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);}return dp[nums.length - 1];}}

空间优化, 由于递推时只使用到了前两个值, 使用两个变量代替 dp数组

    class Solution {public int rob(int[] nums) {if (nums.length == 0) return 0;if (nums.length == 1) return nums[0];int dp0 = 0;int dp1 = nums[0];for (int i = 1; i < nums.length; i++) { // 控制次数int temp = Math.max(dp1, dp0 + nums[i]);dp0 = dp1;dp1 = temp;}return dp1;}}

写法2:

    class Solution {public int rob(int[] nums) {if (nums.length == 0) {return 0;}if (nums.length == 1) {return nums[0];}int first = nums[0];int second = Math.max(nums[0], nums[1]);for (int i = 2; i < nums.length; i++) {int temp = Math.max(second, first + nums[i]);first = second;second = temp;}return second;}}

参考:
官方题解


http://www.ppmy.cn/news/126028.html

相关文章

[kuangbin带你飞]专题十二 基础DP1 -B - Ignatius and the Princess IV

“OK, you are not too bad, em… But you can never pass the next test.” feng5166 says. “I will tell you an odd number N, and then N integers. There will be a special integer among them, you have to tell me which integer is the special one after I tell y…

Android P DP1:WiFi-RTT、刘海、多摄像头、GIF动画、NNAPI 1.1

\ 看新闻很累&#xff1f;看技术新闻更累&#xff1f;试试下载InfoQ手机客户端&#xff0c;每天上下班路上听新闻&#xff0c;有趣还有料&#xff01;\ \\ 谷歌发布了Android P第一个开发预览版&#xff08;DP1&#xff09;&#xff0c;其中有几项值得注意的新特性&#xff1a;…

[kuangbin带你飞]专题十二 基础DP1 H - Tickets HDU - 1260

题目描述 Jesus, what a great movie! Thousands of people are rushing to the cinema. However, this is really a tuff time for Joe who sells the film tickets. He is wandering when could he go back home as early as possible. A good approach, reducing the total …

[kuangbin带你飞]专题十二 基础DP1

ID Origin Title 题解连接 167 / 465 Problem A HDU 1024 Max Sum Plus Plus here 234 / 372 Problem B HDU 1029 Ignatius and the Princess IV 水题&#xff01;&#xff01;&#xff01; 161 / 259 Problem C HDU 1069 Monkey and Banana here …

R1286K010E(DP1/107)

R1286K010E,电源IC R1286K010E(DP1/107) 2ch DCDC(Step Up DC/DC and lnverting DC/DC) 2ch DCIDC转换器是专为AMOL ED显示电源而设计的。它包括 升压式直流变换器和逆变式DC/DC变换器。 输出电压&#xff1a;【4.6V到5.8V可调音圈】 操作电压&#xff1a;【2.3V至5.5V】 输出电…

遭遇krnln.fnr,com.run,shell.fne,dp1.fne,eAPI.fne,internet.fne,RegEx.fnr,spec.fne等

遭遇krnln.fnr,com.run,shell.fne,dp1.fne,eAPI.fne,internet.fne,RegEx.fnr,spec.fne等 一位网友说他的电脑可能中病毒了&#xff0c;症状为把U盘中的文件夹改名后再双击&#xff0c;就提示找不到文件夹。 通过&#xff31;&#xff31;远程协助&#xff0c;先检查U盘&#xf…

极客日报第 71 期:虎牙被抬员工当事人再发声;Android 12 DP1 带来新隐私功能;IBM 考虑出售 Watson Health 业务

文章目录 一、互联网快讯二、程序员专属三、Github 每日精选四、CSDN 社区优质博文精选 一、互联网快讯 1、茄子快传发现多个安全漏洞 安全公司趋势科技报告在茄子快传中发现多个安全漏洞&#xff0c;而它的漏洞能导致远程代码执行。茄子快传是下载量最高的传输应用&#xff…

Zut_round 8(多维dp1)

A: 这一题我开始的想法是&#xff1a;先找出两个字符串的最长公共子序列的长度&#xff0c;在用两个字符串中的较大值减它。但交了好几次一直wa&#xff0c;就换了一种思路 #include <bits/stdc.h> using namespace std; const int N 1005; char a[N],b[N]; int f[N][N…