给出一个有 nn 个元素的数列 aa 和一个整数 ss,其中数列 aa 的元素是按照升序排列的。
请你在数列中找出两个元素 x,yx,y,使得的 x+y=sx+y=s。
输入格式
输入第一行一个整数 n(1 \le n \le 10^5)n(1≤n≤105),表示数列中的元素个数。
接下来一个输入 nn 个空格隔开的整数,表示输入的数列 aa,保证是升序排列,并且 -10^9 \le a_i \le 10^9−109≤ai≤109。
接下来一行输入一个整数 s(-10^9 \le x, s \le 10^9)s(−109≤x,s≤1
9)。
#include <iostream>
using namespace std;
int main(){
long long n;
cin >> n;
long long num[n];
for(long long i=0;i<n;i++){
cin >> num[i];
}
long long aim;
cin >> aim;
long long left=(n-1)/2;
long long right = left+1; //定义为中间两个数
while(left>=0 && right<n){
if(num[left] + num[right] == aim){
cout << "Yes";
return 0;
}else if(num[left] + num[right] < aim){
right++;
}else if(num[left] + num[right] > aim){
left--;
}
}
cout << "No";
return 0;
}