LeetCode0198.打家劫舍

题目要求

 

 

 

算法分析

按照数组顺序偷,将每个房子累计可能偷到的最大值记录下来,

到第0个房子累计偷到的最大值Value[0] = nums[0]

到第1个房子累计偷到的最大值Value[1] = Max( Value[0],nums[1])

到第2个房子累计偷到的最大值Value[2] = Max( Value[1], Value[0]+nums[2])

到第3个房子累计偷到的最大值Value[3] = Max( Value[2], Value[1]+nums[3])

......

到第i个房子累计偷到的最大值Value[i] = Max( Value[i-1], Value[i-2]+nums[i])

 

Value数组可以不声明,因为Value[i-1],Value[i-2]的值可以用2个变量动态保存,减少空间复杂度

代码展示(C#)

public class Solution {
    public int Rob(int[] nums) {
        int n = nums.Length;
        if(n==0){return 0;}
        if(n==1){return nums[0];}

        int nonExcept = nums[0];
        int except = Math.Max(nums[1],nonExcept);
        for(int i = 2; i < n; i++){
            int temp = except;
            except = Math.Max(except,nonExcept+nums[i]);
            nonExcept = temp;
        }
        return except;
    }
}

 

提交结果

 

posted on 2020-05-29 12:43  King__R  阅读(115)  评论(0编辑  收藏  举报