198.打家劫舍

思路

标签:动态规划

动态规划方程:dp[n] = MAX( dp[n-1], dp[n-2] + num )

由于不可以在相邻的房屋闯入,所以在当前位置 n 房屋可盗窃的最大值,要么就是 n-1 房屋可盗窃的最大值,要么就是 n-2 房屋可盗窃的最大值加上当前房屋的值,二者之间取最大值

举例来说:1 号房间可盗窃最大值为 33 即为 dp[1]=3,2 号房间可盗窃最大值为 44 即为 dp[2]=4,3 号房间自身的值为 22 即为 num=2,那么 dp[3] = MAX( dp[2], dp[1] + num ) = MAX(4, 3+2) = 5,3 号房间可盗窃最大值为 55

时间复杂度:O(n)O(n),nn 为数组长度


class Solution {

public int rob(int[] nums) {

        int len = nums.length;

        if (len ==0)

            return 0;

        int[] dp =new int[len +1];

        dp[0] =0;

        dp[1] = nums[0];

        for (int i =2; i <= len; i++) {

            dp[i] = Math.max(dp[i -1], dp[i -2] + nums[i -1]);

        }

        return dp[len];

    }

}

你可能感兴趣的:(198.打家劫舍)