//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; }