Bit Manipulation

number of 1 bits: https://leetcode.com/problems/number-of-1-bits/

n &= n - 1; 一次可以去掉一个1,记录到 n == 0 执行的次数

 

Missing Number: https://leetcode.com/problems/missing-number/

将0 ~ N和所有的元素XOR

 

 

Single Number: https://leetcode.com/problems/single-number/

因为0 ^ A == A && A ^ A == 0,所以将所有的元素xor起来即可

 

Single Number II: https://leetcode.com/problems/single-number-ii/

记住就行。当一个数第一次出现时xor到ones,第二次出现从ones移除,xor到twos,第三次出现从twos移除。一个比较general的方法参考https://leetcode.com/discuss/54970/an-general-way-to-handle-all-this-sort-of-questions

 

Single Number III: https://leetcode.com/problems/single-number-iii/

将所有的元素xor起来,只保留结果中最右边的1,然后通过将这一位是不是1将数组分成两个部分,将这两个部分分别xor起来就能得到结果。详细说明参考 https://leetcode.com/discuss/60408/sharing-explanation-of-the-solution

 

Bitwise AND of Numbers Range: https://leetcode.com/problems/bitwise-and-of-numbers-range/

当m<n,最后一位LSB肯定是0,将m、n右移,直到m == n,然后将结果左移回去

 

 

Divide Two Integers: https://leetcode.com/problems/divide-two-integers/

设置一个tmp初始化为divisor,count初始化为1,如果tmp左移一位小于等于dividend,则将其左移一位,并将count左移一位,直到tmp左移一位后不再小于dividend,将count加到result里,令dividend -= tmp,然后再将tmp初始化为divisor,重复这个过程直到dividend < divisor。注意两点:1)必须声明dd和ds为long long,因为取绝对值时INT_MIN会overflow;2)对于long long取绝对值要用labs函数

傻逼题,不值得花时间。

 

Maximum Product of Word Lengths: https://leetcode.com/problems/maximum-product-of-word-lengths/

设置一个vector key,对每一个string,key[i] |= 1 << (word[i][j] - 'a'),j是一个string中所有的字符,这样通过key[i]就能知道word[i]中有哪些字符。在计算最大长度时,如果key[i] & key[j] == 0则说明二者没有共同的字符

 

Power of Four: https://leetcode.com/problems/power-of-four/

4^n = (2^2) ^ n = 2 ^(2n),所以如果一个数是4^n,则首先它的二进制只有一个1,并且这个1一定出现在0/1/3等奇数位,因为输入是32 bit,所以只要求 num & 0x5555,5555,看结果是不是0即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值