解题思路:
典型动态规划。
题目中规定:在不能偷窃相邻的房屋的前提下,求最大偷窃量。
定义dp
数组来存储最大的偷窃量,则dp[i]
表示抢到第i
个住户时的最大偷窃量。
如果偷窃了第i-1
个住户,就不能再偷窃第i
个住户,所以:dp[i] = max(dp[i-2]+nums[i],dp[i-1])
代码:1
2
3
4
5
6
7
8
9
10Java:
public int rob(int[] nums){
int pre2 = 0, pre1 = 0;
for(int i = 0;i< nums.length;i++){
int cur = Math.max(pre2+nums[i],pre1);
pre2 = pre1;
pre1 = cur;
}
return pre1;
}