题解
其实题目我没有看太懂,但是根据给的示例可以看出就是交换AB两边的各一个数使左右两边的和相等。
即 sumA - sumB = 2x -2y
x 为A 要交换的数,y 为B要交换的数。
这里需要注意的是取值范围的问题,可能会超时所以这里需要用到哈希表,关于哈希表学习的链接如下unordered_set
代码
class Solution {
public:
vector<int> fairCandySwap(vector<int>& A, vector<int>& B) {
int n1 = A.size();
int n2 = B.size();
vector<int>answer;
int sumA = accumulate(A.begin(),A.end(),0);
int sumB = accumulate(B.begin(),B.end(),0);
int ave = (sumA + sumB)/2;
unordered_set<int>rec(A.begin(),A.end());
//int sumA = 0;
bool flag = 0;
for(int i = 0; i < n2; i++){
int x = (sumA - sumB)/2 + B[i];
if(rec.count(x)){
answer = vector<int>{x,B[i]};
break;
}
}
return answer;
}
};