题目
链接
题意简述
有一条纸带上挂着 $n \ (n <= 1000000)$ 个小球,小球有 $k \ (k <= 60)$ 种颜色。
s
找出一个最小的包含所有颜色的区间。
思路
单调队列
使一个队列中一直保持有所有颜色,不断向右移动
若末尾小球的颜色出现次数 $ > 1$ ,将其弹出,直到末尾小球的颜色出现次数 $ = 1$ 。
时间复杂度: $O(n)$ 。
代码
1 |
|
杂项
- 这里用了 $std::pair$ 实现,$std::pair$ 大法好!
蒟蒻的博客
有一条纸带上挂着 $n \ (n <= 1000000)$ 个小球,小球有 $k \ (k <= 60)$ 种颜色。
s
找出一个最小的包含所有颜色的区间。
使一个队列中一直保持有所有颜色,不断向右移动
若末尾小球的颜色出现次数 $ > 1$ ,将其弹出,直到末尾小球的颜色出现次数 $ = 1$ 。
时间复杂度: $O(n)$ 。
1 | #include <bits/stdc++.h> |