在利用双指针算法解题时,考虑原问题如何用暴力算法解出,观察是否可构成单调性,若可以,就可采用双指针算法对
暴力算法进行优化.
暴力算法
#include<iostream>
using namespace std;
const int N=100010;
int a[N],b[N];
int main()
{
int n,m,x;
cin>>n>>m>>x;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>b[i];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i]+b[j]==x)
{
cout<<i<<" "<<j;
return 0;
}
}
}
return 0;
}
双指针算法
#include<iostream>
using namespace std;
const int N=100010;
int a[N],b[N];
int main()
{
int n,m,x;
cin>>n>>m>>x;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>b[i];
//当a[i]+b[j]>=x时,随着i增加,j减少
for(int i=0,j=m-1;i<n;i++)
{
while(j>=0 && a[i]+b[j]>x) j--;
if(a[i]+b[j]==x)
{
cout<<i<<" "<<j;
return 0;
}
}
return 0;
}