MEX:最小非负整数
210 字
1 分钟
MEX:最小非负整数
MEX 即一个数组中的最小非负整数,它满足下面三个性质:
只有在添加的数等于当前序列的mex时,mex的值才会变化。 添加操作只会使得mex变大 删除操作会使得mex的值变小。
对于一个随时插入,删除元素的数组,想高效的查询mex可使用 set 和 一个计数数组
用一个set<int> st 来记录没有出现过的数,然后直接取最小值就可以了,当然需要一个cnt来计数。
最小值用begin取得
struct Mex { static const int N = 1e5 + 5; int cnt[N] = {}; set<int> s; Mex() { for (int i = 0; i < N; ++i) s.insert(i); }
void add(int x) { if (!cnt[x]) s.erase(x); ++cnt[x]; }
void del(int x) { if (cnt[x] == 1) s.insert(x); if (cnt[x]) --cnt[x]; }
int get() { return *s.begin(); }};文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
并查集
数据结构与算法并查集的基本概念(Union/Find)与路径压缩 C++ 模板。
2
数组离散化
数据结构与算法数组离散化的三种 C++ 写法:sort+unique、lower_bound 映射与宏封装。
3
Grafana 可视化与监控
云原生与运维Grafana 的定位、常见数据源与 Grafana + Prometheus 经典监控链路。
4
微服务之间如何传递 trace
后端开发跨服务传递的是 trace 上下文而非 tracer:HTTP header、gRPC metadata 与 MQ 消息头的标准做法。
5
kubectl port-forward 端口转发
云原生与运维kubectl port-forward 转发 Pod/Service、让局域网访问以及常用排查命令。
随机文章随机推荐











