动态规划(基础版)-- 斐波那契类型 -- 打家劫舍
This commit is contained in:
parent
1a5eff65f8
commit
bc1269f434
63
dynamic-programming/src/leetcode/editor/cn/HouseRobber.java
Normal file
63
dynamic-programming/src/leetcode/editor/cn/HouseRobber.java
Normal file
@ -0,0 +1,63 @@
|
||||
//<p>你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,<strong>如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警</strong>。</p>
|
||||
//
|
||||
//<p>给定一个代表每个房屋存放金额的非负整数数组,计算你<strong> 不触动警报装置的情况下 </strong>,一夜之内能够偷窃到的最高金额。</p>
|
||||
//
|
||||
//<p> </p>
|
||||
//
|
||||
//<p><strong>示例 1:</strong></p>
|
||||
//
|
||||
//<pre>
|
||||
//<strong>输入:</strong>[1,2,3,1]
|
||||
//<strong>输出:</strong>4
|
||||
//<strong>解释:</strong>偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
|
||||
// 偷窃到的最高金额 = 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)。
|
||||
// 偷窃到的最高金额 = 2 + 9 + 1 = 12 。
|
||||
//</pre>
|
||||
//
|
||||
//<p> </p>
|
||||
//
|
||||
//<p><strong>提示:</strong></p>
|
||||
//
|
||||
//<ul>
|
||||
// <li><code>1 <= nums.length <= 100</code></li>
|
||||
// <li><code>0 <= nums[i] <= 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)
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
<p>你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,<strong>如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警</strong>。</p>
|
||||
|
||||
<p>给定一个代表每个房屋存放金额的非负整数数组,计算你<strong> 不触动警报装置的情况下 </strong>,一夜之内能够偷窃到的最高金额。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>[1,2,3,1]
|
||||
<strong>输出:</strong>4
|
||||
<strong>解释:</strong>偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
|
||||
偷窃到的最高金额 = 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)。
|
||||
偷窃到的最高金额 = 2 + 9 + 1 = 12 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 100</code></li>
|
||||
<li><code>0 <= nums[i] <= 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>
|
Loading…
Reference in New Issue
Block a user