题目描述:https://leetcode.com/problems/array-partition-i
思想是让值最接近的两个数成为一个group,最简单的可以先排序,在取其中下标为偶数的元素。但排序本身耗费时间。
可以先计算每个元素出现的次数,从小到大,每间隔一个元素取一个,相加。
AC代码:
public class Solution {
public int arrayPairSum(int[] nums) {
int[] eles = new int[20001];
for(int i=0; i<nums.length; i++){
eles[nums[i] + 10000]++;
}
boolean check = true;
int sum = 0;
for(int i=0; i<eles.length; i++){
while(eles[i] > 0){
if(check){
sum += i-10000;
}
check = !check;
eles[i]--;
}
}
return sum;
}
}