算法随想录算法训练营第四十一天|198.打家劫舍 213.打家劫舍I

198.打家劫舍 

class Solution {
    public int rob(int[] nums) {
        int[] dp = new int[nums.length+1];
        dp[0] = 0;
        dp[1] = nums[0];
        for(int i = 2;i<=nums.length;i++){
            dp[i] = Math.max(dp[i-1],dp[i-2]+nums[i-1]);
        }
        return dp[nums.length];
    }
}

 213.打家劫舍II  

思路:当房屋是一个环行的时候,可以分情况考虑,第一种情况,第一间房间不偷窃,可以偷窃最后一个房间;第二种情况,偷窃第一个房间,不可以偷窃最后一个房间。

class Solution {
    public int rob(int[] nums) {
        if(nums.length == 1)
            return nums[0];
        int[] dp1 = new int[nums.length+1];//第一个不取
        int[] dp2 = new int[nums.length+1];//第一个取
        dp1[0] = 0;
        dp1[1] = 0;
        for(int i = 2;i<=nums.length;i++){
            dp1[i] = Math.max(dp1[i-1],dp1[i-2]+nums[i-1]); 
        }
        dp2[0] = 0;
        dp2[1] = nums[0];
        for(int i = 2;i

你可能感兴趣的:(算法,leetcode,数据结构)