题目
这不是今天的每日一题。这是前几天和男票随机摇了一题比谁做的快。(那天我俩都没做出来就搁置了)。今天我俩又捡起来看,我在他之前搞出来了。
https://leetcode-cn.com/problems/house-robber-ii/
答案
我使用的是双层dp。
最大值沿用dp思路,如果最大值包含最后一个值和最大值不包含本身。
最大值不包含最后一个值:正常dp的dp[length-1]
最大值包含最后一个值:去掉首尾和倒数第二个值的dp[newLength] + 最后一个值
- 先忽略头尾不能并存的规则,按照普通思路求出dp数组。
dp[i] = Math.max(dp[i-1], dp[i-2] + nums[i])
- 如果length小于4可以直接return 结果。如果大于等于4,继续往下走。
- copy一个数组,长度是length-3,就是去掉第一个,和最后两个。求出新的dp。
- 结果就是两者取大值。
class Solution {
public int rob(int[] nums) {
int length = nums.length;
if (length ==