1 条题解

  • 0
    @ 2024-3-26 17:56:38

    虽然是双指针原题,但是双端队列也可以解决,试试吧

    思路

    遍历1~ n每副画,先从1开始把画加到队列中,直到所有画师都出现,接着开始判断,如果队首画师出现的次数大于1,就把队首弹出,使这个队列的长度尽可能的小,并打擂记录最小长度

    参考代码
    //关键代码
        while(!q.empty() && vis[a[q.front()]] > 1)
        {
    		vis[a[q.front()]]--;
    		q.pop_front(); //如果队列中存在与队首相同的画,那么队首这幅画就没必要存在,弹出队首
    	}
    	if(sum == m)  //当队列中已经存在所有画师的画时
    		if(q.size() < ans)  //记录每次遍历的队列的最小长度
    		{
    			ans = q.size();
    			l = q.front();
    			r = q.back();
    		}
    
    • 1

    信息

    ID
    698
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    60
    已通过
    27
    上传者