LeetCode0198.打家劫舍

Posted kingr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
}

 

提交结果

技术图片

 

以上是关于LeetCode0198.打家劫舍的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-动态规划-day3

LeetCode刷题笔记-动态规划-day3

LeetCode刷题笔记-动态规划-day3

LeetCode 198. 打家劫舍c++/java详细题解

LeetCode 213. 打家劫舍 IIc++/java详细题解

LeetCode题解打家劫舍(中等难度)