题目要求
算法分析
按照数组顺序偷,将每个房子累计可能偷到的最大值记录下来,
到第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; } }