給定長度為 2n 的陣列, 你的任務是將這些數分成 n 對, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得從1 到 n 的 min(ai, bi) 總和最大。
示例 1:
輸入: [1,4,3,2]
n 是正整數,範圍在 [1, 10000].
陣列中的元素範圍在 [-10000, 10000].
/*思路:排序,然後將下標為 0、2、4 ... 個數相加即可。
由於是純數字,並且限定了數字範圍,所以可使用基數排序達到 o(n) 複雜度。
數字範圍 [-10000, 10000],所以可建立 n[20001],對每個元素加 10000 使其變為正數。
*/int arraypairsum(int* nums, int
numssize)
, i, j, sum;
for (i = 0; i < numssize; i++) //
建立值、鍵雜湊表,即基數排序
n[nums[i] + 10000]++; //
保證下標為正數
for (i = j = sum = 0; i < 20001; ) //
將下標為 0、2、4 ... 的相加
else i++; //
不存在,跳過該值
}return
sum;
}
LeetCode561 陣列拆分 I
給定長度為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 陣列中的元...
LeetCode 561 陣列拆分 I
給定長度為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 陣列中的元...
LeetCode 561 陣列拆分I
給定長度為 2n 的陣列,你的任務是將這些數分成 n 對,例如 a1,b1 a2,b2 an,bn 使得從1 到 n 的 min ai,bi 總和最大。示例 1 輸入 1,4,3,2 n 是正整數,範圍在 1,10000 陣列中的元素範圍在 10000,10000 1 按照題目的要求,如果想得從1 ...