213. House Robber II

来源:互联网 发布:linux exec用法 编辑:程序博客网 时间:2024/06/10 18:46
class Solution {public:    int rob(vector<int>& nums) {        if(0 == nums.size())            return 0;        if(1 == nums.size())            return nums[0];        return max(robLine(nums.begin(), nums.end()-2), robLine(nums.begin()+1, nums.end()-1));            }        int robLine(vector<int>::iterator low, vector<int>::iterator high) {        int sz = high - low + 1;        if(0 == sz)            return 0;        if(1 == sz)            return *low;        if(2 == sz)            return max(*low, *high);                vector<int> max_chosen (sz, 0x80000000);        vector<int> max_unchosen (sz, 0x80000000);        max_chosen[0] = *low; max_unchosen[0] = 0;        max_chosen[1] = *(low+1); max_unchosen[1] = max_chosen[0];        for(int i = 2; i < sz; ++i){            max_chosen[i] = *(low+i) +max(max_chosen[i-2], max_unchosen[i-2]);            max_unchosen[i] = max(max_chosen[i-1], max_unchosen[i-1]);        }        return max(max_chosen.back(), max_unchosen.back());    }};

原创粉丝点击