213 House Robber II

来源:互联网 发布:aerial windows 编辑:程序博客网 时间:2024/06/05 00:10

题意:在House Robber的基础上做了一点修改,给出的数不是一位数组而是组成了一个环。
分析:方法同House Robber。考虑组成环之后的数,选中第一个数,最后一个数就不能再选了,综合数组nums[0,n-2]和nums[2,n-1]选较大者则为问题答案。
代码:

class Solution {public:    int rob(vector<int>& nums) {        int n=nums.size();          if(n==0)  return 0;          if(n==1)  return nums[0];          vector<int> dp1(n-1,0);        dp1[0]=nums[0];          dp1[1]=max(nums[0],nums[1]);          for(int i=2;i<n-1;++i)  dp1[i]=max(dp1[i-1],dp1[i-2]+nums[i]);        vector<int> dp2(n-1,0);        dp2[0]=nums[1];        dp2[1]=max(nums[1],nums[2]);        for(int i=3;i<n;++i)  dp2[i-1]=max(dp2[i-2],dp2[i-3]+nums[i]);        return max(dp1[n-2],dp2[n-2]);    }};
0 0
原创粉丝点击