位运算

2018-10-24  本文已影响0人  MononokeHime

位运算不仅可以简化某些复杂的操作,而且具有更快的计算速度。典型的应用就是除法,交换两个数值,以及在一个数组中寻找只出现一次的数字等待。

常见的位运算:

左移右移

num = num >> i
return num&1

异或运算的特性:

一个数字异或它自己结果为0,异或0结果为它自己即a^a=0,a^0=a,且异或满足a^b^c=a^(b^c)。

例如查找数组[1,2,3,2,1]中只出现1次的数字,其他数字都出现偶次

我们可以设置一个ret异或每个数组元素,最后相同的都抵消为0,那个唯一的数字异或0为它自己即为答案。

ret = 0
for i in nums:
    ret^=i
return ret

# ret = 0^1^2^3^2^1=3

剑指offer40:数组中只出现一次的数字

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。

解题思路:

剑指offer 10:二进制中1的个数

例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2

    def NumberOf1(self, n):
        # write code here
        count = 0
        for i in range(32): # 模拟int是4个字节
            if n & 1 == 1:
                count+=1
            n=n>>1
        return count
上一篇 下一篇

猜你喜欢

热点阅读