//C语言双循环遍历
int* fairCandySwap(int* A, int ASize, int* B, int BSize, int* returnSize){
int sumA=0,sumB=0,i,j;
int* arr = (int*)calloc(2,sizeof(int));
*returnSize=2;
for (i=0; i<ASize; i++)
sumA+=A[i];
for (i=0; i<BSize; i++)
sumB+=B[i];
for (i=0; i<ASize; i++)
{
for (j=0; j<BSize; j++)
{
if (A[i]-B[j] == (sumA-sumB)/2){
arr[0]=A[i];
arr[1]=B[j];
return arr;
}
}
}
return arr;
}
//C语言 哈希 最快
int* fairCandySwap(int* A, int ASize, int* B, int BSize, int* returnSize){
int sumA=0,sumB=0,i,j,val;
int hash[100001]={0};
int* arr = (int*)calloc(2,sizeof(int));
*returnSize=2;
j=(ASize>BSize)?ASize:BSize;
for (i=0; i!=j; i++){
if (i<ASize)
sumA+=A[i];
if (i<BSize){
sumB+=B[i];
hash[B[i]]++;
}
}
for (i=0; i<ASize; i++)
{
val = (sumA>sumB)? A[i]-(sumA-sumB)/2: A[i]+abs((sumA-sumB)/2);
if (val>=0 && val<=100001 && hash[val]){
arr[0]=A[i];
arr[1]=val;
return arr;
}
}
return arr;
}