2022-04-24:位集 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”]。
力扣2166. 设计位集。

答案2022-04-24:

自然智慧即可。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
bs := Constructor(5)
bs.Fix(3)
bs.Fix(1)
bs.Flip()
fmt.Println(bs.All())
bs.Unfix(0)
bs.Flip()
fmt.Println(bs.One())
bs.Unfix(0)
fmt.Println(bs.Count())
fmt.Println(bs.ToString())
} type Bitset struct {
bits []int
size int
zeros int
ones int
reverse bool
} func Constructor(n int) Bitset {
ans := Bitset{}
ans.bits = make([]int, (n+31)/32)
ans.size = n
ans.zeros = n
ans.ones = 0
ans.reverse = false
return ans
} func (this *Bitset) Fix(idx int) {
index := idx / 32
bit := idx % 32
if !this.reverse {
if (this.bits[index] & (1 << bit)) == 0 {
this.zeros--
this.ones++
this.bits[index] |= (1 << bit)
}
} else {
if (this.bits[index] & (1 << bit)) != 0 {
this.zeros--
this.ones++
this.bits[index] ^= (1 << bit)
}
}
} func (this *Bitset) Unfix(idx int) {
index := idx / 32
bit := idx % 32
if !this.reverse {
if (this.bits[index] & (1 << bit)) != 0 {
this.ones--
this.zeros++
this.bits[index] ^= (1 << bit)
}
} else {
if (this.bits[index] & (1 << bit)) == 0 {
this.ones--
this.zeros++
this.bits[index] |= (1 << bit)
}
}
} func (this *Bitset) Flip() {
this.reverse = !this.reverse
tmp := this.zeros
this.zeros = this.ones
this.ones = tmp
} func (this *Bitset) All() bool {
return this.ones == this.size
} func (this *Bitset) One() bool {
return this.ones > 0
} func (this *Bitset) Count() int {
return this.ones
} func (this *Bitset) ToString() string {
builder := make([]byte, 0)
for i := 0; i < this.size; i++ {
status := this.bits[i/32] & (1 << (i % 32))
if this.reverse {
if status == 0 {
builder = append(builder, '1')
} else {
builder = append(builder, '0')
}
} else {
if status == 0 {
builder = append(builder, '0')
} else {
builder = append(builder, '1')
}
}
}
return string(builder)
}

执行结果如下:


左神java代码

2022-04-24:位集 Bitset 是一种能以紧凑形式存储位的数据结构。 请你实现 Bitset 类。 Bitset(int size) 用 size 个位初始化 Bitset ,所有位都是 0的更多相关文章

  1. C语言 数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理

    C语言中,数组初始化的方式主要有三种: 1.声明时,使用 {0} 初始化: 2.使用memset: 3.用for循环赋值. 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码: #define ...

  2. 黑科技--位集--bitset

    自从上次网赛发现这么个东西之后,深深地感受到了bitset的强大,0.0. 正常的bool占用1字节空间,bitset可以把这个缩到1bit,空间上8倍优化.正常用起来可能会跟位运算状态压缩类似,但是 ...

  3. MATLAB:一个K×M的矩阵,第一列是1,其它都是0,从最后一行开始,每循环一次,最后一行的1往右边移一位,移动到末尾后溢出,重新回到最左边,同时上一行的1往右边移一位

    问题:一个K×M的矩阵,第一列是1,其它都是0,从最后一行开始,每循环一次,最后一行的1往右边移一位,移动到末尾后溢出,重新回到最左边,同时上一行的1往右边移一位.上一行溢出时,上上一行的1移动一位, ...

  4. 搭建ubuntu14.04的hadoop集群【docker容器充当服务器】

    首先弄出来装有hadoop.java.ssh.vim的镜像起名badboyf/hadoop.做镜像有两种方法,一种是用Dockerfile来生成一个镜像,一种是基于ubuntu14.04的基础镜像生成 ...

  5. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  6. Ubuntu14.04安装intel集显驱动

    Ubuntu14.04安装intel集显驱动 标签(空格分隔): ubuntu linux 驱动安装 1.查看本机显卡型号 使用lspci命令来获取PCI接口硬件信息 o@o-pc:~$ lspci ...

  7. 《数据结构与算法之美》 <03>数组:为什么很多编程语言中数组都从0开始编号?

    提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊. 是的,在每一种编程语言中,基本都会有数组这种数据类型.不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构.尽管数组看起来非常 ...

  8. ROS的安装-> rosdep init /update报错2022.02.24实测有效

    ROS的安装-> rosdep init /update报错2022.02.24实测有效   一. 解决rosdep_init问题 正常执行sudo rosdep init会报错,如下: ERR ...

  9. RGB颜色 三者都是0为黑色而255是白色 解释

    问题: RGB颜色 都是0为黑色而255是白色 与日常生活的黑色白色差距怎么那么大,(与物理学中的黑色吸收光是否相悖)而且为什么要这样定义呢? 链接:https://www.zhihu.com/que ...

  10. 绝对定位上下左右都为0 margin为auto为什么能居中

    老规矩,先来一段废话,我大学刚入门的时候觉得CSS很简单,记一记就会了,不就是盒模型嘛,现在想来觉得自己那时候真的很自以为是哈哈.但是随着工作沉淀,我明白了任何技术都有着它的深度和广度,正是因为不少人 ...

随机推荐

  1. podman 入门实战

    一入编程深似海,从此节操是路人. 最近使用podman,就想着写一篇总结性的笔记,以备后续参考.就如同写代码,不写注释,过了一段时间可能会想这是我写的吗?不会吧,还要理一下逻辑才能读懂,不利于后期维护 ...

  2. Java方法-什么是方法

    Java方法-什么是方法 package com.andy.base.Andy.operator.method; public class Demo01 { //main方法 public stati ...

  3. 【故障公告】cc攻击又来了,雪上加霜的三月

    非常非常抱歉!今天 21:20-22:10 左右,肆无忌惮的 cc 攻击又来了,蓄意攻击者很厉害,躲过阿里云云盾的黑洞机制,轻松击垮园子的博客站点,又给大家带来了很大的麻烦,请大家谅解! 今年3月是园 ...

  4. Web For Pentester - SQL injections/Directory traversal

    SQL injections Example 1 典型的SQL注入 name=root' or 1=1 %23 直接执行就可以导出所有用户 查看后端的源码 观察到,我们传入入的name中,传入就成为了 ...

  5. 基于Sekiro的jsRPC的使用和安装

    什么是jsRPC 说实话在介绍 JSRPC 我向大家推荐一个库 Selenium-wire 感觉和JSrpc的原理很像 RPC指远程过程调用,APP里面的RPC大家比较熟悉了. 那什么是jsRPC,顾 ...

  6. 如何自动化测试你的接口?—— Rest Assured

    前言 不知道大家的项目是否都有对接口API进行自动化测试,反正像我们这种小公司是没有的.由于最近一直被吐槽项目质量糟糕,只能研发自己看看有什么接口测试方案.那么在本文中,我将探索如何使用 Rest A ...

  7. Promise合集

    Promise.all Promise.all 可以将多个 Promise 实例包装成一个新的 Promise 实例.所有的 Promise 对象都成功时返回的是一个结果数组,一旦有任何一个 Prom ...

  8. Java BasePooledObjectFactory 对象池化技术

    Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类 一个对象池包含一组已经初始化过且可以使用的对象,而可以在有需求时创建和销毁对象.池的用户可以 ...

  9. Docker容器中使用GPU

    背景 容器封装了应用程序的依赖项,以提供可重复和可靠的应用程序和服务执行,而无需整个虚拟机的开销.如果您曾经花了一天的时间为一个科学或 深度学习 应用程序提供一个包含大量软件包的服务器,或者已经花费数 ...

  10. [网络/Linux]网络嗅探工具——nmap

    1 nmap 简介 Nmap 即 Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是网络扫描和主机检测的工具,用nmap进行信息收集和检测漏洞,功能有: 检测存活主机 ...