c++[002]期
Posted 心砚时间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++[002]期相关的知识,希望对你有一定的参考价值。
今天继续为大家推送c++算法之入门
01
—
题目
爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。
因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。
返回两个整数,其中第一个是爱丽丝必须交换的糖果棒的大小,第二个是Bob 必须交换的糖果棒的大小。
如果有多个答案,你可以返回其中任何一个。保证答案存在。
题目来源:力扣(LeetCode)
02
—
代码
using namespace std;
int main(){
int n,m;
vector <int> v1,v2;
cout<<"请输入爱丽丝的糖果的大小(输入0结束)";
cin>>n;
while(n!=0){
v1.push_back(n);
cin>>n;
}
cout<<"请输入鲍勃的糖果的大小(输入0结束)";
cin>>m;
while(m!=0){
v2.push_back(m);
cin>>m;
}
int sumA=accumulate(v1.begin(),v1.end(),0);
int sumB=accumulate(v2.begin(),v2.end(),0);
set <int> s1(v1.begin(),v1.end());
int a=(sumA-sumB)/2;
int x,y;
for(int i=0;i<v2.size();i++){
int b=v2[i]+a;
if(s1.count(b)){
x=b;
y=v2[i];
cout<<x<<" "<<y<<endl;
break;
}
}
return 0;
}
03
—
心得
-
本题较为简单,主要思路是先找到等式关系。x,y分别为爱丽丝与鲍勃需要交换的糖果大小,则有sumA-x+y=sumB+x-y,则x=y+(sumA+sumB)/2,然后在第一个数组里依次找是否有满足式子的值即可。
-
查找时用到了set,因为它是基于红黑树的,故查找效率高。
以上是关于c++[002]期的主要内容,如果未能解决你的问题,请参考以下文章