leetcode第198题打家劫舍
思路分析:
- **dp数组的定义:**对数组中0 - i中的位置进行打劫,能够打劫到的最大利润为dp[i]
- **状态转移方程的推导:**状态就是只有一种,当前房屋盗或是不盗,
- 如果盗,能够获得的最大利润为dp【i - 2】 + nums[i] dp[i - 1]肯定没盗
- 如果不盗,能够获得的最大利润为 dp【i - 2】
- 如何在这两种状态中进行选呢? 去两中状态的最大值
- **dp数组的初始化:**dp【0】的定义为:对下标为0的位置进行打劫,能够得到的最大利润。dp【1】的定义为对0 - 1的位置进行打劫,能够获得的最大利润
- **遍历顺序:**从前往后进行遍历,得到最后结果
- **举例推导dp数组:**自己玩去吧!
class Solution {
public int rob(int[] nums) {
//试着写一下打家劫舍的代码
// dp数组的定义:
int[] dp = new int[nums.length];
if(nums.length == 1){
return nums[0];
}
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 - 2] + nums[i],dp[i - 1]);
}
return dp[nums.length - 1];
}
}