方法一:采用最笨的方法,先排序(从小到大),注意这个题不能用n方排序算法,也就是冒泡排序是用不了的,这个题可以用Arrays的sort函数(采用的是快速排序),也可以自己写一个快排或者归并排序,然后从第一个元素开始,隔一个加一下求和即可
class Solution {
public int arrayPairSum(int[] nums) {
Arrays.sort(nums);//快速排序
int res=0;
for(int i=0;i<nums.length;i=i+2){
res+=nums[i];
}
return res;
}
}
方法二:可以采用桶排序的思想,就是用数组中的每一个值当作桶的下标,这样就有顺序了,相同的元素,只要桶对应下标数组元素++即可,有几个相同的就加几个1,然后从最小的开始读,隔一个加一个,需要注意几点,就是这个题范围是-10000开始的,而数组没有办法有负的下标,所以可以对所有加10000,保证从0开始,这样就可以了,还有一个就是重复元素的处理
class Solution {
public int arrayPairSum(int[] nums) {
int[] res=new int[20001];
for(int i=0;i<nums.length;i++){
res[nums[i]+10000]++;
}
boolean flag=true;
int sum=0;
for(int i=0;i<20001;i++){
while(res[i]>0){
if(flag){
sum=sum+i-10000;
}
flag=!flag;
res[i]--;
}
}
return sum;
}
}