Untitled
unknown
plain_text
14 days ago
2.9 kB
7
Indexable
class Solution { public: int max3(int a, int b, int c) { return max(a, max(b, c)); } int min3(int a, int b, int c) { return min(a, min(b, c)); } int max3exclude(int a, int b, int c, int cur_max) { int res = 0; if (a != cur_max) res = max(a, res); if (b != cur_max) res = max(b, res); if (c != cur_max) res = max(c, res); return res; } int min3exclude(int a, int b, int c, int cur_min) { int res = INT_MAX; if (a != cur_min) res = min(a, res); if (b != cur_min) res = min(b, res); if (c != cur_min) res = min(c, res); return res; } int left3(int a, int b, int c) { return max3(a, b, c) + min3(a, b, c); } int left2(int a, int b) { return max(a, b); } int minCost(vector<int>& nums) { if (nums.size() == 3) { return left3(nums[0], nums[1], nums[2]); } else if (nums.size() == 2) { return left2(nums[0], nums[1]); } else if (nums.size() == 1) return nums[0]; int cost = 0, cur_max, cur_min; for (int i = 1, left = nums[0]; i < nums.size(); i += 2) { // handle edge cases if (i == nums.size() - 1) { cout << "case left 2" << endl; cost += left2(left, nums[i]); break; } if (i == nums.size() - 2) { cout << "case left 3" << endl; cost += left3(left, nums[i], nums[i + 1]); break; } if (i == nums.size() - 3) { cout << "case left 4" << endl; cur_max = max3(left, nums[i], nums[i + 1]); cur_min = min3(left, nums[i], nums[i + 1]); // sneak cur max to next round if (cur_max <= nums[i + 2]) { cost += max3exclude(left, nums[i], nums[i + 1], cur_max); left = cur_max; cout << "cost: " << cost << endl; } else { // discard the max two nums, leave min to next round cost += max3exclude(left, nums[i], nums[i + 1], cur_min); left = cur_min; } continue; } cout << "case usual" << endl; cur_max = max3(left, nums[i], nums[i + 1]); cur_min = min3(left, nums[i], nums[i + 1]); // sneak cur max to next round if (cur_max < max(nums[i + 2], nums[i + 3])) { cost += max3exclude(left, nums[i], nums[i + 1], cur_max); left = cur_max; cout << "cost: " << cost << endl; } else { // discard the max two nums, leave min to next round cost += max3exclude(left, nums[i], nums[i + 1], cur_min); left = cur_min; } continue; } return cost; } };©leetcode
Editor is loading...
Leave a Comment