思路(求出交换的两块糖果之间的差值,然后在两个数组中遍历,直到找出符合的两个糖果大小)
代码1(724ms,时间太长)
class Solution {
public:
vector<int> fairCandySwap(vector<int>& A, vector<int>& B) {
vector<int> result;
int sum_a = 0;
int sum_b = 0;
int flag = 0;
for(int i = 0; i < A.size(); i++)
sum_a += A[i];
for(int i = 0; i < B.size(); i++)
sum_b += B[i];
int half = (sum_a + sum_b)/2;
int a = half - sum_a;
for(int i = 0; i < A.size(); i++)
{
for(int j = 0; j < B.size(); j++)
{
if(A[i] + a == B[j])
{
result.push_back(A[i]);
result.push_back(B[j]);
flag = 1;
break;
}
}
if(flag==1)
break;
}
return result;
}
};
代码2(关于需要在数组中搜索的问题,首先考虑构造关联容器map、set这个比for循环遍历高效很多)
1、初始化set,2、auto 3、cbegin() cend()
class Solution {
public:
vector<int> fairCandySwap(vector<int>& A, vector<int>& B) {
vector<int> result;
set<int> s(B.cbegin(), B.cend());
int flag = 0;
int sum_a = accumulate(A.cbegin(), A.cend(), 0);
int sum_b = accumulate(B.cbegin(), B.cend(), 0);
int half = (sum_a + sum_b)/2;
int a = half - sum_a;
for(auto c:A)
{
if(s.find(c+a)!=s.end())
{
//result.push_back(c);
//result.push_back(c+a);
return {c,c+a};
}
}
}
};