题目描述
在一个长度为n的正整数序列(2<n<106)中,判断是否存在和为k的两个元素。
输入
第一行是n和k,空格隔开;(0<k<=106, 2<n<=106)
第二行是n个整数ai(0<ai<106),空格隔开。
输出
如果存在两个元素和为k,则输出yes,否则输出no.
样例输入 Copy
9 10 1 2 3 4 5 6 7 8 9
样例输出 Copy
yes
提示
样例输入2:
3 100
111 222 333
样例输出2:
no
样例输入3:
3 333
111 111 333
样例输出3:
no
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k,a[1000010];
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1,j=n;i<j;;){
if(a[i]+a[j]==k){
cout<<"yes"<<endl;return 0;
}else if(a[i]+a[j]<k){
i++;
}else{
j--;
}
}
cout<<"no"<<endl;
return 0;
}