198.打家劫舍
我的代码
public static int robx(int[] nums) {
int sum1 = 0;
int sum2 = 0;
int i = 0;
while(i < nums.length) {
if(i % 2 == 0) {
//奇偶判断
sum1 += nums[i];
sum1 = sum1 > sum2 ? sum1 : sum2;
//将奇和、偶和比较,拿到最大的值。
}else {
sum2 += nums[i];
sum2 = sum1 > sum2 ? sum1 : sum2;
//将奇和、偶和比较,拿到最大的值。
}
i ++;
}
return i = sum1 > sum2 ? sum1 : sum2;
//最后再判断一次。保证拿到最大值(因为最后一次循环我们不能确认那个是最大的!)。
}
我的理解
这个题呢,我刚开始想的太简单了,以为只是单纯的奇偶相加,但是却是只要满足不是相邻的,这个就比较难判断,这是最大的问题。我想了半天还是没有解决办法,只好去看解析,解析是动态规划,但是动态规划却看不懂,我太难了!
最终找到了一个比较简单的,容易理解的,但我还是有点没有看懂!(挺难理解的)!能理解的注释在代码中!
大佬的代码
public int rob(int[] nums) {
int pre =0, cur = 0;
//两个变量
for(int x : nums){
int tem = cur;
//设置一个中间变量,
cur = Math.max(pre+x,cur);
//
pre = tem;
}
return cur;
}
我对大佬代码的理解
真看不懂,他应该是将动态规划用的最简单的那一种!看完动态规划之后再更新!