2166. 设计位集

简介: 笔记

题目


位集 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 位一致。


代码


class Bitset {
public:
    int n;   // 总长度
    int sum; // 1的数量
    bool fp; // 反转
    vector<bool> st;
    Bitset(int size) {
        st.resize(size);
        n = size;
        fp = false;
        sum = 0;
    }
    void fix(int idx) {
        // idx置1
        // fp==false: st[idx]==false, sum++
        // fp==true:  st[idx]==true, sum++
        if(!(st[idx] ^ fp)) sum++, st[idx] = !st[idx];
    }
    void unfix(int idx) {
        // idx置0
        if(st[idx] ^ fp) sum--, st[idx] = !st[idx];
    }
    void flip() {
        fp = !fp;
        sum = n - sum;
    }
    bool all() {
        return sum == n;
    }
    bool one() {
        return sum >= 1;
    }
    int count() {
        return sum;
    }
    string toString() {
        string res = "";
        for (int i = 0; i < n; i++) 
            if(st[i] ^ fp) res += '1';
            else res += '0';
        return res;
    }
};
相关文章
|
7月前
|
芯片 Python
前道设计
前道设计
51 3
|
7月前
|
前端开发 算法 芯片
后道设计
后道设计
49 1
|
数据可视化 数据处理
结构化分析与设计
一、结构化分析与设计 结构化分析与设计(Structured Analysis and Design,简称SAD)是一种软件开发方法论,旨在通过分析和设计来构建高质量的软件系统。 结构化分析与设计的主要特点包括以下几点: 1. 结构化分析:结构化分析是通过对系统需求进行分析,将系统分解为若干个功能模块,并定义它们之间的关系和交互。在结构化分析中,常用的工具和技术包括数据流图(Data Flow Diagram,简称DFD)、数据字典(Data Dictionary)和实体关系图(Entity-Relationship Diagram,简称ERD)等。 2. 结构化设计:结构化设计是在结构化分析
696 2
|
XML 存储 安全
深入理解HttpSecurity的设计
介绍了基于配置文件的使用方式以及实现细节,如下:
109 0
|
7月前
|
存储 SQL 前端开发
分类目录功能模型设计
分类目录功能模型设计
|
设计模式 架构师 Java
聊聊简单设计
聊聊简单设计
137 0
|
算法 BI
贪心策略设计并解决会场安排问题
贪心策略设计并解决会场安排问题
335 3
贪心策略设计并解决会场安排问题
|
安全 NoSQL JavaScript
C/C++为什么要专门设计个do…while?
最初do ... while的出现,更多的是作为循环控制流的一种语法糖。因为不论是while 还是 for循环,都是要先判断是否满足进入循环体的条件的。满足条件之后才能进入循环去执行循环体内的操作。
191 0
C/C++为什么要专门设计个do…while?
|
存储 消息中间件 算法
服务设计要解决的问题
 前几天和同事聊天,同事说:   “业务的服务(相对于我们基础架构这边的底层技术)在技术上就需要解决三个问题:分布式、通信和存储。”   我回忆之前做业务的时光,觉得确实,再加上一个“服务治理”就差不多了。想想“服务设计要解决的问题”这个话题可以把之前静儿写的很多文章做一个归纳概括。今天做一个总结。
服务设计要解决的问题