算法基础课复习第二天<双指针>
作者:
骏杰
,
2022-04-29 21:39:00
,
所有人可见
,
阅读 168
最长连续不重复子序列:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=100010;
int a[N];
int s[N];//每个数出现的次数
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int res=0;
for(int i=0,j=0;i<n;i++)
{
s[a[i]]++;
while(j<=i&&s[a[i]]>1)
{
s[a[j]]--;
j++;
}
res=max(res,i-j+1);
}
cout<<res<<endl;
return 0;
}
数组元素的目标和:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=100010;
int a[N],b[N];
int n,m,x;
int main()
{
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,j=m-1;i<n;i++)
{
while(j>=0&&a[i]+b[j]>x) j--;
if(a[i]+b[j]==x)
{
cout<<i<<" "<<j<<endl;
break;
}
}
return 0;
}
判断子序列:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=100010;
int a[N];
int b[N];
int n,m;
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>b[i];
int i=0,j=0;
while(i<n&&j<m)
{
if(a[i]==b[j]) i++;
j++;
}
if(i==n)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
return 0;
}