LeetCode 2166. 设计位集(Bitset)
文章目录
- 1. 题目
- 2. 解题
1. 题目
位集 Bitset
是一种能以紧凑形式存储位的数据结构。
请你实现 Bitset
类。
Bitset(int size)
用 size 个位初始化 Bitset ,所有位都是 0 。void fix(int idx)
将下标为 idx 的位上的值更新为 1 。如果值已经是 1 ,则不会发生任何改变。void unfix(int idx)
将下标为 idx 的位上的值更新为 0 。如果值已经是 0 ,则不会发生任何改变。void flip()
翻转 Bitset 中每一位上的值。换句话说,所有值为 0 的位将会变成 1 ,反之亦然。boolean all()
检查 Bitset 中 每一位 的值是否都是 1 。如果满足此条件,返回 true ;否则,返回 false 。boolean one()
检查 Bitset 中 是否 至少一位 的值是 1 。如果满足此条件,返回 true ;否则,返回 false 。int count()
返回 Bitset 中值为 1 的位的 总数 。String toString()
返回 Bitset 的当前组成情况。注意,在结果字符串中,第 i 个下标处的字符应该与 Bitset 中的第 i 位一致。
示例:
输入
["Bitset", "fix", "fix", "flip", "all", "unfix", "flip", "one", "unfix", "count", "toString"]
[[5], [3], [1], [], [], [0], [], [], [0], [], []]
输出
[null, null, null, null, false, null, null, true, null, 2, "01010"]解释
Bitset bs = new Bitset(5); // bitset = "00000".
bs.fix(3); // 将 idx = 3 处的值更新为 1 ,此时 bitset = "00010" 。
bs.fix(1); // 将 idx = 1 处的值更新为 1 ,此时 bitset = "01010" 。
bs.flip(); // 翻转每一位上的值,此时 bitset = "10101" 。
bs.all(); // 返回 False ,bitset 中的值不全为 1 。
bs.unfix(0); // 将 idx = 0 处的值更新为 0 ,此时 bitset = "00101" 。
bs.flip(); // 翻转每一位上的值,此时 bitset = "11010" 。
bs.one(); // 返回 True ,至少存在一位的值为 1 。
bs.unfix(0); // 将 idx = 0 处的值更新为 0 ,此时 bitset = "01010" 。
bs.count(); // 返回 2 ,当前有 2 位的值为 1 。
bs.toString(); // 返回 "01010" ,即 bitset 的当前组成情况。提示:
1 <= size <= 10^5
0 <= idx <= size - 1
至多调用 fix、unfix、flip、all、one、count 和 toString 方法 总共 105 次
至少调用 all、one、count 或 toString 方法一次
至多调用 toString 方法 5 次
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/design-bitset
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 使用 vector 存储 32 位 int 实现
class Bitset {int size;int tot1;vector<int> bit;string str;
public:Bitset(int size) {this->size = size;this->tot1 = 0;str.reserve(size);bit.resize(ceil(size/32.0));}void fix(int idx) {int i = idx/32;int j = idx%32;if(((bit[i]>>j)&1)==0){bit[i] |= 1<<j;++tot1;}}void unfix(int idx) {int i = idx/32;int j = idx%32;if(((bit[i]>>j)&1)==1){bit[i] &= ~(1<<j);--tot1;}}void flip() {tot1 = size - tot1;for(auto& b : bit)b = ~b;}bool all() {return tot1==size;}bool one() {return tot1>0;}int count() {return tot1;}string toString() {str = "";for(auto b : bit){for(int i = 0; i < 32; ++i){if((b>>i)&1)str.push_back('1');elsestr.push_back('0');if(str.size() == size)break;}}return str;}
};
556 ms 190.9 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 2166. 设计位集(Bitset)相关推荐
- 牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)
题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的连通图,每个点都有一种颜色,每条边都有一个权值,现在规定一个起点 st,再给出 q 次询问,每次询问给出区间 [ l , r ] , ...
- 【牛客 - 368D】动态连通块(并查集+bitset优化)
题干: 小T有n个点,每个点可能是黑色的,可能是白色的. 小T对这张图的定义了白连通块和黑连通块: 白连通块:图中一个点集V,若满足所有点都是白点,并且V中任意两点都可以只经过V中的点互相到达,则称V ...
- LeetCode 641. 设计循环双端队列
文章目录 1. 题目信息 2. 解题 1. 题目信息 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront(): ...
- 【LeetCode】﹝并查集ி﹞连通分量个数(套用模板一直爽)
[LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 文章目录 [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 模板(使用路径压缩的加权quick-union算法) 连通网络 ...
- 电气工程系毕业设计大全单片机精品设计合集参考案例地址
第一:单片机毕业设计不用愁!!30篇单片机毕业设计参考案例 https://blog.csdn.net/uuzz8888/article/details/82911782 第二:经典51单片机精品设计 ...
- Leetcode 355. 设计推特 C++
Leetcode 355. 设计推特 题目 设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文.你的设计需要支持以下的几个 ...
- 免费资源下载:两套超棒的UI界面设计素材集
日期:2012-7-6 来源:GBin1.com 每周我们都会在互联网上给大家收集最新最酷的web免费素材,今天我们带给大家两套超棒的UI界面素材集.相信大家如果应用到自己的网站开发和设计中,肯定会 ...
- leetcode 622——设计循环队列
leetcode 622--设计循环队列(C语言提交) 题目链接:leetcode 622--设计循环队列 题目描述: 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先 ...
- Leetcode 622. 设计循环队列
Leetcode 622. 设计循环队列学习 分析 代码 参考链接 分析 循环队列,自己做题时没考虑怎么实现,可以通过索引下标除以数组的长度实现循环.循环队列的队首元素和队尾元素是动态变化的,删除一个 ...
最新文章
- TMG 2010 建立站对站***隧道
- python之4个小作业
- 数据结构Java07【二叉排序树(添加查找删除-节点)】
- linux 邮件发送时间,Linux-No.04 Linux 设置定时任务发送邮件功能
- c向文件中插入数据_Redis从文件中批量插入数据
- git仓库的基本用法
- 【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)
- 静态html js文件上传,js实现动态添加上传文件页面
- dlink虚拟服务器端口转发,D-Link路由器端口转发怎么设置【图文教程】
- 数据科学包11-数据可视化
- verilog求倒数-ROM实现方法
- NATS_11:NATS集群构建与验证
- 各大PT网站信息记录(不断更新中)
- mysql dump 1449_mysqldump 1449错误解决办法
- Android hilt 依赖注入使用详解
- MVVM设计模式的大体布局框架
- 采用morison方程基于matlab计算大直径波浪力,用Morison方程计算分析悬浮隧道所受波浪力初探...
- Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)
- MySQL中什么是关系型数据库???
- RISC-V矢量指令集学习记录
热门文章
- Android怎么插手机卡,魅蓝E手机卡怎么装 魅蓝E手机SIM卡安装图文教程
- python until怎么用_python基础之从认识python到python的使用
- 铁路售票系统_铁路资讯:复兴号动车、智能京张高铁…中国最高端铁路装备看这里...
- 【深度学习】Cifar-10-探究不同的改进策略对分类准确率提高
- add.attribute向前端传_前端知识-概念篇
- mysql 数据检查_mysql数据一致性检查及修复
- cocos2dx 3.4 截图代码
- springaop----springaop的使用(一)
- POJ 2395 Out of Hay
- MediaPlayer 播放视频的方法