C練題筆記之:Leetcode-561. 陣列拆分 I

2020-08-12 23:01:30

題目:

給定長度爲 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;
}