逛画展的题解

逛画展的题解,第1张

思路:

因为画家只有2000个,所以可以用哈希来做,记录区域内每个画家有几幅画。


先定义l,r代表a,b,不断向右移动,并通过统计新画家的画,减去左边画家的画来计算是否看到了所有画家的画。


记录(l-r+1)最少值。


输出。


代码:

#include

using namespace std;

const int N=1e6+5;

int n,m;

int a[N];

int num[2005],cnt;//cnt:统计画家数量

int main(){

cin>>n>>m;

for(int i=1;i<=n;i++){

cin>>a[i];

}

int l=1,r=1;

num[a[1]]++;

cnt=1;

//  a,b的合适值,l,r最小差

int posa=1,posb=n,mins=n;

//右端点

while(r

while(r

num[a[++r]]++;

if(num[a[r]]==1){

cnt++;

}

}

//左端点

while(l

if(r-l+1

mins=r-l+1;

posa=l;

posb=r;

}

num[a[l]]--;

if(num[a[l]]==0) cnt--;

l++;

}

}

cout<

return 0;

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)

保存