c++[002]期

Posted 心砚时间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++[002]期相关的知识,希望对你有一定的参考价值。

今天继续为大家推送c++算法之入门



01

题目


爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。
因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。
返回两个整数,其中第一个是爱丽丝必须交换的糖果棒的大小,第二个是Bob 必须交换的糖果棒的大小。
如果有多个答案,你可以返回其中任何一个。保证答案存在。

题目来源:力扣(LeetCode)


02


代码



#include <iostream>#include <vector>#include <set>#include <numeric>//使用accumulate函数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]期的主要内容,如果未能解决你的问题,请参考以下文章

数字信号基于matlab轴承故障分析(时频图+功率谱)含Matlab源码 002期

69期-Java SE-002_变量运算符-001-002

练一练 16 期C++ 小训练,快来打卡!

69期-Java SE-004_循环数组-001-002

002期彻底掌握UML类图

69期-Java SE-007_面向对象-1-001-002