leetcode 198. 打家劫舍

leetcode 198. 打家劫舍
本题是动态规划问题
dp[i]表示偷盗前i间房屋能偷到的最大金额,
不能偷相邻的房间,当遇到第i间房时,有两种选择
1.选择偷第i间房,此时偷的金额=前i-2间房金额+第i间房的金额
2.不偷第i间房,此时偷的金额=前i-1间房的金额

状态转移方程:
dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1])

临界条件:
只有一间房,就是该间房的金额
有两间房,选择两间中金额最大的偷

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

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)