// 尺取法:指对数组保存一对下标(起点,终点),然后根据实际情况交替推进两个端点知道得出答案的方法。
#include<iostream>
#include<cstdio>
#include<set>
#include<map>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max_n=1e6+10;
int n;
int a[Max_n];
set<int>st;
map<int,int>mp;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
st.insert(a[i]);
}
int l=0,k=0,num=st.size(),ans=n;
for(int r=0;r<n;r++){
mp[a[r]]++;
if(mp[a[r]]==1)k++;
while(mp[a[l]]>1)mp[a[l++]]--;
if(k==num)ans=min(ans,r-l+1);
}
printf("%d\n",ans);
return 0;
}
Poj-3320 Jessica’s Reading Problem(尺取法)
最新推荐文章于 2024-02-16 17:44:03 发布
本文介绍了一种名为“尺取法”的算法实现思路及其应用。尺取法通过维护一对下标来遍历数组,并根据实际需求调整两端点的位置,直至找到问题的解答。文章通过具体的C++代码展示了如何使用尺取法解决特定问题。

&spm=1001.2101.3001.5002&articleId=88758271&d=1&t=3&u=dce3f8c391774050a63b22854dbde9a2)
594

被折叠的 条评论
为什么被折叠?



