状态方程:dp[i]=max{ dp[i-k]+nums[i] } 其中2<=k<=i; 需要注意初始化和一些边界条件
public int rob(int[] nums) {
if(nums.length==1)return nums[0];
int[] dp=new int[nums.length];
dp[0]=nums[0];
dp[1]=Math.max(nums[0], nums[1]);
int max=dp[1];
for(int i=2; i
时间复杂度高了:
public int rob(int[] nums) {
if(nums.length==1)return nums[0];
if(nums.length==2)return Math.max(nums[0], nums[1]);
int[] dp=new int[nums.length]; //前i家的最大打劫值
dp[0]=nums[0];
dp[1]=Math.max(nums[0], nums[1]);
for(int i=2; i
打家劫舍2
思想:把环拆成两个队列,一个是从0到n-1,另一个是从1到n,然后返回两个结果最大的。
public int rob(int[] nums) {
if(nums.length==1)return nums[0];
if(nums.length==2)return Math.max(nums[0], nums[1]);
int[] dp=new int[nums.length];
dp[0]=nums[0];
dp[1]=Math.max(nums[0], nums[1]);
int max=dp[1];
//0~n-1
for(int i=2; i
打家劫舍3
之后来填坑



