class Solution {
public:
int arrayPairSum(vector<int>& nums) {
/*
//解法1,时间复杂度(O(nlogn))
int sum=0;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i+=2)
{
sum+=nums[i];
}
return sum;
*/
//解法2,时间复杂度(O(n))
int sum=0;
int hash[20001]={0};
int size=nums.size();
for(int i=0;i<size;i++)
{
++hash[nums[i]+10000];
}
bool flag=true; //当前已遍历的单复数
for(int i=0;i<20001;i++)
{
if(hash[i]==0)
continue;
if(flag)
{
sum+=(hash[i]+1)/2*(i-10000);
}
else
{
sum+=(hash[i]/2)*(i-10000);
}
if(hash[i]&0x01!=0) //若为单数变换
flag=!flag;
}
return sum;
}
};