1.思路:2n个元素,两两配对,要每组中的最小者累加和最小,那肯定不能让前n个最小的元素分散再每个组,不然每个组中的最小的值就是前n个最小元素之和了,不满足题意,所以应该尽量避免这种情况,怎样才能避免小元素落在了不同组呢,对于排序后的数组,只要将0号元素和1号元素放在一个组,那必然有一个组不包含前n个小元素,这样加起来肯定就大一些,同样的,将3和4号元素再放在一个组,又会出现一个组不包含小元素(排序后的前n个元素),sum又变大了,只要将前面的小元素全部以序放在一起,保证sum就是最小的。至于为啥要排序后依序两两分组,例如排序后元素如下:1,3,3,4,6,7,只能是(1,3)(3,4)(6,7)最小。
2.代码:
class Solution {
public int arrayPairSum(int[] nums) {
int sum = 0;
Arrays.sort(nums);
for (int i = 0; i < nums.length; i=i+2){
sum += nums[i];
}
return sum;
}
}
3.复杂度分析:复杂度主要就是快排的时间0(nlogn),空间(logn)