题解
其实题目我没有看太懂,但是根据给的示例可以看出就是交换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;
}
};
公平糖果交换问题解析
本文介绍了一种通过交换两个集合中的元素使它们的总和相等的方法。利用哈希表来提高查找效率,确保算法能在合理的时间内完成计算。
161

被折叠的 条评论
为什么被折叠?



