Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2166.html
2166. Design Bitset (Medium)
A Bitset is a data structure that compactly stores bits.
Implement the Bitset class:
Bitset(int size)Initializes the Bitset withsizebits, all of which are0.void fix(int idx)Updates the value of the bit at the indexidxto1. If the value was already1, no change occurs.void unfix(int idx)Updates the value of the bit at the indexidxto0. If the value was already0, no change occurs.void flip()Flips the values of each bit in the Bitset. In other words, all bits with value0will now have value1and vice versa.boolean all()Checks if the value of each bit in the Bitset is1. Returnstrueif it satisfies the condition,falseotherwise.boolean one()Checks if there is at least one bit in the Bitset with value1. Returnstrueif it satisfies the condition,falseotherwise.int count()Returns the total number of bits in the Bitset which have value1.String toString()Returns the current composition of the Bitset. Note that in the resultant string, the character at theithindex should coincide with the value at theithbit of the Bitset.
Example 1:
Input ["Bitset", "fix", "fix", "flip", "all", "unfix", "flip", "one", "unfix", "count", "toString"] [[5], [3], [1], [], [], [0], [], [], [0], [], []] Output [null, null, null, null, false, null, null, true, null, 2, "01010"] Explanation Bitset bs = new Bitset(5); // bitset = "00000". bs.fix(3); // the value at idx = 3 is updated to 1, so bitset = "00010". bs.fix(1); // the value at idx = 1 is updated to 1, so bitset = "01010". bs.flip(); // the value of each bit is flipped, so bitset = "10101". bs.all(); // return False, as not all values of the bitset are 1. bs.unfix(0); // the value at idx = 0 is updated to 0, so bitset = "00101". bs.flip(); // the value of each bit is flipped, so bitset = "11010". bs.one(); // return True, as there is at least 1 index with value 1. bs.unfix(0); // the value at idx = 0 is updated to 0, so bitset = "01010". bs.count(); // return 2, as there are 2 bits with value 1. bs.toString(); // return "01010", which is the composition of bitset.
Constraints:
1 <= size <= 1050 <= idx <= size - 1- At most
105calls will be made in total tofix,unfix,flip,all,one,count, andtoString. - At least one call will be made to
all,one,count, ortoString. - At most
5calls will be made totoString.
Similar Questions:
Solution 1.
-
class Bitset { private char[] a; private char[] b; private int cnt; public Bitset(int size) { a = new char[size]; b = new char[size]; Arrays.fill(a, '0'); Arrays.fill(b, '1'); } public void fix(int idx) { if (a[idx] == '0') { a[idx] = '1'; ++cnt; } b[idx] = '0'; } public void unfix(int idx) { if (a[idx] == '1') { a[idx] = '0'; --cnt; } b[idx] = '1'; } public void flip() { char[] t = a; a = b; b = t; cnt = a.length - cnt; } public boolean all() { return cnt == a.length; } public boolean one() { return cnt > 0; } public int count() { return cnt; } public String toString() { return String.valueOf(a); } } /** * Your Bitset object will be instantiated and called as such: * Bitset obj = new Bitset(size); * obj.fix(idx); * obj.unfix(idx); * obj.flip(); * boolean param_4 = obj.all(); * boolean param_5 = obj.one(); * int param_6 = obj.count(); * String param_7 = obj.toString(); */ -
class Bitset { public: string a, b; int cnt = 0; Bitset(int size) { a = string(size, '0'); b = string(size, '1'); } void fix(int idx) { if (a[idx] == '0') a[idx] = '1', ++cnt; b[idx] = '0'; } void unfix(int idx) { if (a[idx] == '1') a[idx] = '0', --cnt; b[idx] = '1'; } void flip() { swap(a, b); cnt = a.size() - cnt; } bool all() { return cnt == a.size(); } bool one() { return cnt > 0; } int count() { return cnt; } string toString() { return a; } }; /** * Your Bitset object will be instantiated and called as such: * Bitset* obj = new Bitset(size); * obj->fix(idx); * obj->unfix(idx); * obj->flip(); * bool param_4 = obj->all(); * bool param_5 = obj->one(); * int param_6 = obj->count(); * string param_7 = obj->toString(); */ -
class Bitset: def __init__(self, size: int): self.a = ['0'] * size self.b = ['1'] * size self.cnt = 0 def fix(self, idx: int) -> None: if self.a[idx] == '0': self.a[idx] = '1' self.cnt += 1 self.b[idx] = '0' def unfix(self, idx: int) -> None: if self.a[idx] == '1': self.a[idx] = '0' self.cnt -= 1 self.b[idx] = '1' def flip(self) -> None: self.a, self.b = self.b, self.a self.cnt = len(self.a) - self.cnt def all(self) -> bool: return self.cnt == len(self.a) def one(self) -> bool: return self.cnt > 0 def count(self) -> int: return self.cnt def toString(self) -> str: return ''.join(self.a) # Your Bitset object will be instantiated and called as such: # obj = Bitset(size) # obj.fix(idx) # obj.unfix(idx) # obj.flip() # param_4 = obj.all() # param_5 = obj.one() # param_6 = obj.count() # param_7 = obj.toString() -
type Bitset struct { a []byte b []byte cnt int } func Constructor(size int) Bitset { a := bytes.Repeat([]byte{'0'}, size) b := bytes.Repeat([]byte{'1'}, size) return Bitset{a, b, 0} } func (this *Bitset) Fix(idx int) { if this.a[idx] == '0' { this.a[idx] = '1' this.cnt++ } this.b[idx] = '0' } func (this *Bitset) Unfix(idx int) { if this.a[idx] == '1' { this.a[idx] = '0' this.cnt-- } this.b[idx] = '1' } func (this *Bitset) Flip() { this.a, this.b = this.b, this.a this.cnt = len(this.a) - this.cnt } func (this *Bitset) All() bool { return this.cnt == len(this.a) } func (this *Bitset) One() bool { return this.cnt > 0 } func (this *Bitset) Count() int { return this.cnt } func (this *Bitset) ToString() string { return string(this.a) } /** * Your Bitset object will be instantiated and called as such: * obj := Constructor(size); * obj.Fix(idx); * obj.Unfix(idx); * obj.Flip(); * param_4 := obj.All(); * param_5 := obj.One(); * param_6 := obj.Count(); * param_7 := obj.ToString(); */