原题目: https://leetcode-cn.com/problems/sum-swap-lcci/
思路:
交换的两个数之差是(sum1 - sum2)的一半。注意如果(sum1 - sum2)是奇数就不会有解
代码:
class Solution {
public:
vector<int> findSwapValues(vector<int>& array1, vector<int>& array2) {
long sum1 = accumulate(array1.begin(),array1.end(),0);
long sum2 = accumulate(array2.begin(),array2.end(),0);
long diff = sum1 - sum2;
vector<int> a;
if(diff%2){
return a;
}
map<int,int> m;
diff = diff/2;
for(int i=0;i<array2.size();i++){
m[array2[i]] = 1;
}
for(int i=0;i<array1.size();i++){
if(i>0 && array1[i] ==array1[i-1]){
continue;
}
int b = array1[i] - diff;
if(m[b] == 1){
a.push_back(array1[i]);
a.push_back(b);
return a;
}
}
return a;
}
};
本文提供了一种解决LeetCode上Sum Swap问题的有效算法。该问题要求找出两个整数数组中可以交换的一对元素,使得交换后两数组的和相等。算法首先计算两个数组的总和,然后利用哈希映射寻找可能的交换值。如果两数组和的差值为奇数,则无解;否则,通过查找哈希映射找到符合条件的交换元素。
899

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



