Leetcode 198 打家劫舍

68 阅读1分钟

对于长度为n的打劫目标列表。 设立values数组,长度为n values【i】表示对于已经打劫完前i个家获取到的最大长度。 情况无非两种:

  1. 打劫了i-1家。第i家按规则打劫不了,跳过
  2. 打劫了前i-2家。取values数组下标从0到i-2的元素最大值,加上第i家的财富 以上两种情况求最大值,就是values【i】的最大财富
class Solution {
    public int rob(int[] nums) {
        int n = nums.length;
        if(n==1) return nums[0];
        if(n==2) return Math.max(nums[0],nums[1]);
        int[] values = new int[n];
        values[0]=nums[0];
        values[1]=nums[1];
        for(int i=2;i<n;i++){
            int temp = values[i-1];
           for(int j=0;j<i-1;j++){
               temp = Math.max(temp,values[j]+nums[i]);
           }
           values[i] = temp;
        }
        int result = values[0];
        for(int i=1;i<values.length;i++){
            result = Math.max(result,values[i]);
        }
        return result;
    }
}