设为首页 加入收藏

TOP

LeetCode House Robber II
2015-11-21 01:01:35 来源: 作者: 【 】 浏览:2
Tags:LeetCode House Robber

LeetCode House Robber II

题目

题目

思路

思路来源于Discuss。
一是在Robber这题中的O(n)解法;
二是在Robber这题中,我们只需要分别考虑包含了nums[0]和nums[n-1]的情况即可。
注意这里的包含并不是说Robber一定要偷num[0]或nums[n-1],只是说考虑进去的意思。

代码

#define max(a, b) ((a)>(b)?(a):(b))

int rob(int* nums, int numsSize) {
    if (numsSize <= 0) return 0;
    if (numsSize == 1) return nums[0];
    int evenMax, ooddMax, include0, i;
    for (i = evenMax = ooddMax = 0; i < numsSize - 1; i++)  // 包含nums[0]
        if (i % 2) ooddMax = max(ooddMax + nums[i], evenMax);
        else evenMax = max(evenMax + nums[i], ooddMax);
    include0 = max(evenMax, ooddMax);
    for (i = 1, evenMax = ooddMax = 0; i < numsSize; i++)  // 包含nums[n-1]
        if (i % 2) ooddMax = max(ooddMax + nums[i], evenMax);
        else evenMax = max(evenMax + nums[i], ooddMax);
    return max(include0, max(evenMax, ooddMax));
}
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++结构体 下一篇uva 10163 Storage Keepers (DP)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: