在House Robber问题中,为什么偶数情况是奇数情况?

时间:2020-02-04 20:21:10

标签: algorithm

the problem的整个想法是您不能抢劫连续的房屋。

因此,此解决方案有效并且基于考虑偶数房屋或奇数房屋(在每种情况下都会跳过房屋)的思想:

public int rob(int[] nums) {
    int robEven = 0, robOdd = 0;
    for (int i = 0; i < nums.length; i++) {
        if ( i % 2 == 0) { // even
            robEven = Math.max(robEven + nums[i], robOdd);
        } else {
            robOdd = Math.max(robOdd + nums[i], robEven);
        }
    }
    return Math.max(robEven, robOdd);
}

但是,我的问题是关于Math.max的计算:

robEven = Math.max(robEven + nums[i], robOdd);

在偶数情况下,为什么您不能考虑奇数情况,因为您不能从奇数房子转到偶数房子,因为它们会在隔壁?

我认为解决方案是这样的:

public int rob(int[] nums) {
    int robEven = 0, robOdd = 0;
    for (int i = 0; i < nums.length; i++) {
        if ( i % 2 == 0) { // even
            robEven = Math.max(robEven + nums[i], robEven);
        } else {
            robOdd = Math.max(robOdd + nums[i], robOdd);
        }
    }
    return Math.max(robEven, robOdd);
}

但这不起作用。

0 个答案:

没有答案