动态规划(基础版)-- 斐波那契类型 -- 打家劫舍

This commit is contained in:
轩辕龙儿 2023-09-22 11:52:46 +08:00
parent 1a5eff65f8
commit bc1269f434
2 changed files with 96 additions and 0 deletions

View File

@ -0,0 +1,63 @@
//<p>你是一个专业的小偷计划偷窃沿街的房屋每间房内都藏有一定的现金影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统<strong>如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警</strong></p>
//
//<p>给定一个代表每个房屋存放金额的非负整数数组计算你<strong> 不触动警报装置的情况下 </strong>一夜之内能够偷窃到的最高金额</p>
//
//<p>&nbsp;</p>
//
//<p><strong>示例 1</strong></p>
//
//<pre>
//<strong>输入</strong>[1,2,3,1]
//<strong>输出</strong>4
//<strong>解释</strong>偷窃 1 号房屋 (金额 = 1) 然后偷窃 3 号房屋 (金额 = 3)
//&nbsp; 偷窃到的最高金额 = 1 + 3 = 4 </pre>
//
//<p><strong>示例 2</strong></p>
//
//<pre>
//<strong>输入</strong>[2,7,9,3,1]
//<strong>输出</strong>12
//<strong>解释</strong>偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9)接着偷窃 5 号房屋 (金额 = 1)
//&nbsp; 偷窃到的最高金额 = 2 + 9 + 1 = 12
//</pre>
//
//<p>&nbsp;</p>
//
//<p><strong>提示</strong></p>
//
//<ul>
// <li><code>1 &lt;= nums.length &lt;= 100</code></li>
// <li><code>0 &lt;= nums[i] &lt;= 400</code></li>
//</ul>
//
//<div><div>Related Topics</div><div><li>数组</li><li>动态规划</li></div></div><br><div><li>👍 2787</li><li>👎 0</li></div>
package leetcode.editor.cn;
// 198:打家劫舍
public class HouseRobber {
public static void main(String[] args) {
Solution solution = new HouseRobber().new Solution();
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int rob(int[] nums) {
if (nums.length == 1) {
return nums[0];
} else if (nums.length == 2) {
return Math.max(nums[0], nums[1]);
}
int[] sum = new int[nums.length];
sum[0] = nums[0];
sum[1] = nums[1];
sum[2] = nums[0] + nums[2];
for (int i = 3; i < nums.length; i++) {
sum[i] = Math.max(sum[i - 2], sum[i - 3]) + nums[i];
}
return Math.max(sum[nums.length - 1], sum[nums.length - 2]);
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,33 @@
<p>你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,<strong>如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警</strong></p>
<p>给定一个代表每个房屋存放金额的非负整数数组,计算你<strong> 不触动警报装置的情况下 </strong>,一夜之内能够偷窃到的最高金额。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>[1,2,3,1]
<strong>输出:</strong>4
<strong>解释:</strong>偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
&nbsp; 偷窃到的最高金额 = 1 + 3 = 4 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>[2,7,9,3,1]
<strong>输出:</strong>12
<strong>解释:</strong>偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
&nbsp; 偷窃到的最高金额 = 2 + 9 + 1 = 12 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 100</code></li>
<li><code>0 &lt;= nums[i] &lt;= 400</code></li>
</ul>
<div><div>Related Topics</div><div><li>数组</li><li>动态规划</li></div></div><br><div><li>👍 2787</li><li>👎 0</li></div>