题解 | #打家劫舍(二)#

打家劫舍(二)

http://www.nowcoder.com/practice/a5c127769dd74a63ada7bff37d9c5815

和打家劫舍(一) 思路差不多,优化问题,考虑动态规划。 和一的区别是这里是一个环形,第一个和最后一个也有限制关系。 问题的求解一定包含如下决策:(可以)选择第一个或者一定不选第一个。 如果可以选择第一个,那么我们直接忽视最后一个,当作打家劫舍一来求解,得到一个答案。 如果一定不选第一个, 那么 dp[0] = 0, dp[1] = nums[1], 依然可以按照打家劫舍一来求解。

int rob(vector<int>& nums) {
        int len = nums.size();
        if(len < 2)return nums[0];
        vector<int> dp;
        dp.resize(len);
        dp[0] = nums[0];
        dp[1] = max(nums[0], nums[1]);
        for(int i = 2; i < len-1; i ++)dp[i] = max(nums[i] + dp[i-2], dp[i-1]);
        
        int ans = dp[len-2];
        dp[0] = 0;
        dp[1] = nums[1];
        for(int i = 2; i < len; i ++)dp[i] = max(dp[i-2] + nums[i], dp[i-1]);
        ans = max(ans, dp[len-1]);
        
        return ans;
    }
全部评论

相关推荐

06-15 20:57
已编辑
门头沟学院 Java
CARLJOSEPH...:年轻人有傲气很正常,但是建议工作前洗净傲气。 说实在的,什么奖学金什么奖项的都很一般。尊重你的老师,在有时间的时候去上课,真遇到走不开的事,请态度端正地向你的老师说明情况,请求请假。我相信任何一个有师德的老师都会允许的(我的老师就是这样)。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务