C++ 使用尺取法代码实现假设一本教材中有P页每页包含第ai个知识点知识点会有所重复现给出每页的知识点ai以及需要看的知识点数K请你求出能够看完全部1~K个知识点的最短连续页数是多少。注意本题必有解不存在不包含的知识点。输入描述3行第1行包含1个数字P代表页数的个数P。第2行包含P个数字代表教材每页中的知识点ai。第3行包含1个数字K代表需要看完的K个知识点。输出描述1行表示最少连续页数。
#include
using namespace std; const int N = 100000; int a[N],s[N];
int main() { int p,k; scanf("%d",&p); for(int i=0;i<p;i++) { scanf("%d",&a[i]); } scanf("%d",&k); int l=0,r=0,sum=0,ans=0x3f3f3f3f; while(r<p) { s[a[r]]++; if(s[a[r]]==1)sum++; while(sum==k) { ans=min(ans,r-l+1); s[a[l]]--; if(s[a[l]]==0)sum--; l++; } r++; } printf("%d\n",ans); return 0;
原文地址: https://www.cveoy.top/t/topic/fKTg 著作权归作者所有。请勿转载和采集!