for(int i = 0,j=0; i <n; i++)
{
? ? ? ? while(j < i && check(i, j))
? ? ? ? ? ? ? ? j++;
? ? ? ? //具体题目的解题思路
}、
?
#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],b[N],n,maxs;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1,j=1;i<=n;i++){
b[a[i]]++;//i向右移
while(j<=i && b[a[i]]>1)
{
b[a[j]]--;
j++;//j也向右移动
}
maxs=max(maxs,i-j+1);
}
cout<<maxs<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m;
int x;
int a[N], b[N];
int main()
{
cin >> n >> m >> x;
for (int i = 0; i < n;i ++) cin >> a[i];
for (int j = 0; j < m;j ++) cin >> b[j];
for (int i = 0, j = m - 1; i < n; i ++) // 双指针算法 设置两个指针i,j
// i从前往后走 j从后往前走
{
while (j >= 0 && a[i] + b[j] > x) j --; // 首先需要判断一下是否 i,j走出界
// 然后判断一下首尾的元素的和是否大于目标值x
// 如果大于那么j--缩小范围
if (a[i] + b[j] == x) // 如果等于了 就输出结果
{
printf("%d %d\n", i, j);
break;
}
}
return 0;
}