Leetcode 213 打家劫舍2 最大不连续序列和 首尾相接

因为首尾不能同时选择

分两种情况:(1)不考虑“尾”

       (2)不考虑”首“

dp1[ i ] ——不考虑尾时,以 i 结尾的最大不连续序列和

dp2[ i ] ——不考虑首时,以 i 结尾的最大不连续序列和

然后求dp1和dp2中的最大值

 

class Solution {
public:
    int rob(vector<int>& nums) {
        if (nums.size() == 0)return 0;
        if (nums.size() == 1)return nums[0];
        vector<int>nums2 = nums;
        int ans = 0;
        for (int i =0;i < nums.size() - 1;i++) {
            int m = 0, k = -1;
            for (int j = 0;j < i - 1;j++) {
                if (nums[j] >= m) {
                    m = nums[j];
                    k = j;
                }
            }
            nums[i] = m + nums[i];
            if (nums[i] > ans)ans = nums[i];
        }
        for (int i = 1;i < nums2.size();i++) {
            int m = 0, k = -1;
            for (int j = 1;j < i - 1;j++) {
                if (nums2[j] >= m) {
                    m = nums2[j];
                    k = j;
                }
            }
            nums2[i] = m + nums2[i];
            if (nums2[i] > ans)ans = nums2[i];
        }
        return ans;
    }
};

 

posted @ 2019-06-20 10:28  suuusu  阅读(262)  评论(0编辑  收藏  举报