文章目录

  • 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)相关推荐

  1. 牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)

    题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的连通图,每个点都有一种颜色,每条边都有一个权值,现在规定一个起点 st,再给出 q 次询问,每次询问给出区间 [ l , r ] , ...

  2. 【牛客 - 368D】动态连通块(并查集+bitset优化)

    题干: 小T有n个点,每个点可能是黑色的,可能是白色的. 小T对这张图的定义了白连通块和黑连通块: 白连通块:图中一个点集V,若满足所有点都是白点,并且V中任意两点都可以只经过V中的点互相到达,则称V ...

  3. LeetCode 641. 设计循环双端队列

    文章目录 1. 题目信息 2. 解题 1. 题目信息 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront(): ...

  4. 【LeetCode】﹝并查集ி﹞连通分量个数(套用模板一直爽)

    [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 文章目录 [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 模板(使用路径压缩的加权quick-union算法) 连通网络 ...

  5. 电气工程系毕业设计大全单片机精品设计合集参考案例地址

    第一:单片机毕业设计不用愁!!30篇单片机毕业设计参考案例 https://blog.csdn.net/uuzz8888/article/details/82911782 第二:经典51单片机精品设计 ...

  6. Leetcode 355. 设计推特 C++

    Leetcode 355. 设计推特 题目 设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文.你的设计需要支持以下的几个 ...

  7. 免费资源下载:两套超棒的UI界面设计素材集

    日期:2012-7-6  来源:GBin1.com 每周我们都会在互联网上给大家收集最新最酷的web免费素材,今天我们带给大家两套超棒的UI界面素材集.相信大家如果应用到自己的网站开发和设计中,肯定会 ...

  8. leetcode 622——设计循环队列

    leetcode 622--设计循环队列(C语言提交) 题目链接:leetcode 622--设计循环队列 题目描述: 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先 ...

  9. Leetcode 622. 设计循环队列

    Leetcode 622. 设计循环队列学习 分析 代码 参考链接 分析 循环队列,自己做题时没考虑怎么实现,可以通过索引下标除以数组的长度实现循环.循环队列的队首元素和队尾元素是动态变化的,删除一个 ...

最新文章

  1. TMG 2010 建立站对站***隧道
  2. python之4个小作业
  3. 数据结构Java07【二叉排序树(添加查找删除-节点)】
  4. linux 邮件发送时间,Linux-No.04 Linux 设置定时任务发送邮件功能
  5. c向文件中插入数据_Redis从文件中批量插入数据
  6. git仓库的基本用法
  7. 【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)
  8. 静态html js文件上传,js实现动态添加上传文件页面
  9. dlink虚拟服务器端口转发,D-Link路由器端口转发怎么设置【图文教程】
  10. 数据科学包11-数据可视化
  11. verilog求倒数-ROM实现方法
  12. NATS_11:NATS集群构建与验证
  13. 各大PT网站信息记录(不断更新中)
  14. mysql dump 1449_mysqldump 1449错误解决办法
  15. Android hilt 依赖注入使用详解
  16. MVVM设计模式的大体布局框架
  17. 采用morison方程基于matlab计算大直径波浪力,用Morison方程计算分析悬浮隧道所受波浪力初探...
  18. Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)
  19. MySQL中什么是关系型数据库???
  20. RISC-V矢量指令集学习记录

热门文章

  1. Android怎么插手机卡,魅蓝E手机卡怎么装 魅蓝E手机SIM卡安装图文教程
  2. python until怎么用_python基础之从认识python到python的使用
  3. 铁路售票系统_铁路资讯:复兴号动车、智能京张高铁…中国最高端铁路装备看这里...
  4. 【深度学习】Cifar-10-探究不同的改进策略对分类准确率提高
  5. add.attribute向前端传_前端知识-概念篇
  6. mysql 数据检查_mysql数据一致性检查及修复
  7. cocos2dx 3.4 截图代码
  8. springaop----springaop的使用(一)
  9. POJ 2395 Out of Hay
  10. MediaPlayer 播放视频的方法