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; } };
Sometimes it takes some patience, sometimes it works first try.
But I know that this is worth it,cause this dream's too strong to die.