Bit Manipulation
常见操作
x.bit_count():返回x的二进制表示中,有几个1。也可以理解为,x最少需要用几个2的幂次之和来表示。
脑筋急转弯
2749. 得到整数零需要执行的最少操作数
设x = num1 - k * num2,则问题转化为:能否用k个2的幂次(允许重复)表示x?
找x的上下界,并且枚举。可对x = num1 - k * num2画图,k为横轴,x为纵轴。则答案为这条直线在第一象限上的某些点,通过分析x=2^(i1)+…2^(ik)这个等式,找到可能的x值。
由于2的幂次最小是1,所以x>=k
那么x最大为多少?x最大时,k最小,即k=x.bit_count()
把k从小到大枚举,第一个满足等式的,即为答案
3495. 使数组元素都变为零的最少操作次数
对一个数字除以 4 并向下取整:二进制右移两位 对于一个数字,如果它的二进制表示有n位,那么它需要(n+1)//2次操作可以变成0
| |