給定長度爲 2n 的陣列, 你的任務是將這些數分成 n 對, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得從1 到 n 的 min(ai, bi) 總和最大。
範例 1:
輸入: [1,4,3,2]
輸出: 4
解釋: n 等於 2, 最大總和爲 4 = min(1, 2) + min(3, 4).
提示:
n 是正整數,範圍在 [1, 10000].
陣列中的元素範圍在 [-10000, 10000].
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/array-partition-i
著作權歸領釦網路所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
其實只要排序,然後取奇數位的和即可。
比如:1234
1和3配對的話肯定最終是1和2相加,這樣不是最大,所以最大的肯定是1+3.
因此只要先排序,然後把奇數位的相加。
int compar(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int arrayPairSum(int* nums, int numsSize){
int count = 0;
qsort(nums, numsSize, sizeof(int), compar);
for(int i = 0; i < numsSize; i += 2)
{
count += nums[i];
}
return count;
}