作者终于更新了,稀罕事呀!🙃
1. 它又双叒叕是干什么的
它是一种算法,用于求一个序列里满足条件的一对数(设这对数的下标分别为L和R,那么L<R)。
2. 算法原理
我们定义一个序列a,设n为长度,求满足条件的一对数。
我们设L为左指针,设R为右指针。
L=数组第一个数的下标,R=数组最后一个数的下标;
在满足L<R的条件下。
if(满足条件)按题目要求做;
else if(按题目给的特殊情况是否该向有缩小范围)L++;
else R--;
注:题目给的特殊情况,例如已经排好序了。🤔
3. 是不是很简单,让我们来做一道题吧
小牛叉给出了n个不同的数,按照升序已经排好序了,小牛叉的朋友要找到数组内哪两个数相加等于x。小牛叉保证只存在唯一的答案。下面请你编程帮助小牛叉的朋友算出数组中,哪两个数相加等于x。
话说我为什么要帮助小牛叉的朋友🙃
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[1005],n,x;
int main(){
cin>>n>>x;
for(int i=1;i<=n;i++)cin>>a[i];
ll L=1,R=n;
while(L<R){
ll sum=a[L]+a[R];
if(sum==x){
cout<<a[L]<<' '<<a[R];//输出找到的两个数。
break;
}else if(sum<x)L++;//向右缩小范围。
else R--;//向左缩小范围。
}
return 0;
}