561. Array Partition I
2017-09-21 21:30
489 查看
题目
561. Array Partition I解题思路
给一串数字然后对其两两组合保证其组合的最小数字之和最大。很明显最后的sum受到组合的min数字的影响,因此要对这串数字进行排序,保证按序组合才能保证获得的数字之和最大。
具体代码
class Solution { public: void swap(vector<int>& nums, int a, int b) { int t = nums[a]; nums[a] = nums[b]; nums[b] = t; } int partition(vector<int>& nums, int left, int right) { int pivot = nums[right]; int low = left, high = right - 1; while (low < high) { while (low < high && nums[low] <= pivot) ++low; while (low < high && nums[high] > pivot) --high; if (low < high) swap(nums, low, high); } if (nums[high] <= pivot) ++high; swap(nums, high, right); return high; } void quicksort(vector<int>& nums, int left, int right) { if (left < right) { int index = partition(nums, left, right); quicksort(nums, left, index-1); quicksort(nums, index+1, right); } } int arrayPairSum(vector<int>& nums) { // 快排排序 quicksort(nums, 0, nums.size()-1); // 取组合的较小数字 int sum = 0; for (int i = 0; i < nums.size(); i += 2) { sum += nums[i]; } return sum; } };
相关文章推荐
- 561. Array Partition I
- 561. Array Partition I。
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I
- Leetcode 561: Array Partition I
- leetcode 561:Array Partition I
- 561. Array Partition I
- LeetCode[561]Array Partition I
- 561. Array PartitionI
- 561. Array Partition I
- LeetCode 561 Array Partition I
- 561. Array Partition I
- 561. Array Partition I
- Leetcode 561 Array Partition I