AcWing 双指针算法打卡
799. 最长连续不重复子序列
https://www.acwing.com/problem/content/801/
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
using namespace std;
const int Maxn=1e5+5;
int a[Maxn];
int n;
int s[Maxn];//本质Hash表
int main(){
cin>>n;
int res=0;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0,j=0;i<n;i++){
s[a[i]]++;
while(j<i && s[a[i]]>1) s[a[j++]]--;//前面出现次数超过一次,就需要缩短后面的长度
res=max(res,i-j+1);
}
cout<<res<<endl;
return 0;
}
// freopen("testdata.in", "r", stdin);
800. 数组元素的目标和
https://www.acwing.com/problem/content/802/
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
using namespace std;
int n,m,x;
const int Maxn=1e5+5;
long long a[Maxn];
long long b[Maxn];
int main(){
cin>>n>>m>>x;
for(int i=0;i<n;i++){
scanf("%ld",a+i);
}
for(int i=0;i<m;i++){
scanf("%ld",b+i);
}
int j=m-1;
for(int i=0;i<n;i++){
while(j>0 && a[i]+b[j]>x) j--;
if(a[i]+b[j]==x) cout<<i<<" "<<j;
}
return 0;
}
// freopen("testdata.in", "r", stdin);
2816. 判断子序列
https://www.acwing.com/problem/content/2818/
#include <iostream>
#include <cstring>
using namespace std;
const int N = 100010;
int n, m;
int a[N], b[N];
int main()
{
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
for (int i = 0; i < m; i ++ ) scanf("%d", &b[i]);
int i = 0, j = 0;
while (i < n && j < m)
{
if (a[i] == b[j]) i ++ ;
j ++ ;
}
if (i == n) puts("Yes");
else puts("No");
return 0;
}