由于要交换完以后的总量相同,所以首先一定要求sumA和sumB,然后找到他们的差值temp,这里有一个要注意的点,A 中的值valA和B中值valB交换后,对于sumA-sumB来说其实是差了2倍valA-valB(即两倍的temp)。然后我们要做的就是找到2(valA-valB)=temp。我用的办法是先把A和B进行从小到大排序,然后再用两个index1和index2来表示当前的valA和valB的位置,然后如果A[index1]-B[index2]<temp/2,说明此时A的值太小,index1++,反之index2++,如果相等则直接返回A[index1]和B[index2]。
class Solution {
public:
vector<int> fairCandySwap(vector<int>& A, vector<int>& B) {
int sumA=0;
int sumB=0;
int n=A.size();
int m=B.size();
sort(A.begin(),A.end());
sort(B.begin(),B.end());
for(int i=0;i<n;i++){
sumA+=A[i];
}
for(int i=0;i<m;i++){
sumB+=B[i];
}
int index1=0;
int index2=0;
int temp=sumA-sumB;
while(index1<n&&index2<m){
if(A[index1]-B[index2]<temp/2){
index1++;
}
else if(A[index1]-B[index2]>temp/2){
index2++;
}
else{
return{A[index1],B[index2]};
}
}
return {A[index1],B[index2]};
}
};