1 条题解
-
0
虽然是双指针原题,但是双端队列也可以解决,试试吧
思路
遍历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
- 上传者