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;
    }
};
相关文章
|
1月前
|
芯片 Python
前道设计
前道设计
22 3
|
1月前
|
前端开发 算法 芯片
后道设计
后道设计
22 1
|
9月前
|
XML 存储 安全
深入理解HttpSecurity的设计
介绍了基于配置文件的使用方式以及实现细节,如下:
56 0
|
1月前
|
存储 SQL 前端开发
分类目录功能模型设计
分类目录功能模型设计
调查表设计
调查表设计
59 0
|
设计模式 架构师 Java
聊聊简单设计
聊聊简单设计
102 0
|
Java Scala
深入理解简单设计
深入理解简单设计
深入理解简单设计
|
算法 BI
贪心策略设计并解决会场安排问题
贪心策略设计并解决会场安排问题
279 3
贪心策略设计并解决会场安排问题
22. 谈设计
今天谈谈设计这个话题。 22.1. 为什么中国设计如此“丑” 从工业产品,包装,网站,游戏,建筑,园林...... 不是中国没有好的设计师,而是最终决定权不在设计师,而是审美较差的产品经理或企业高层。
1174 0