我遇到了一个采访问题:
我们有任何顺序从1到n的数字。我们开始将这些数字以任何顺序放入数组大小为n-1。这意味着将有一个数字不会输入到数组中。我们必须找到它。
简单的解决方案:
a = [4, 2, 3, 1, 5, 7]
n = 7
print sum(range(1, n+1)) - sum(a) ## prints 6
我在互联网上找到的一个解决方案:
对1个n中的所有元素进行XOR并存储到X1
XOR的所有元素并存储到X2
缺少元素= X1 XOR X2
我制作的代码是:
print reduce(lambda a, b: a ^ b, range(1, n+1)) ^ reduce(lambda a, b: a ^ b, a) ## prints 6
第二种方法对我来说绝对不直观。是否存在以这种方式应用逻辑运算符的特定用例?
答案 0 :(得分:1)
只是为了好玩:有另一种方法可以解决这个问题,使用着名的formula:
n*(n+1)/2 - sum(a)
=> 6
并回答你的问题:不,这是不在整数之间滥用bitwise operators的好用例(不是逻辑运算符,因为值不是布尔值!),以这种方式它完全掩盖了代码的意图。坚持使用算术,直观的解决方案。当需要将整数作为二进制值进行操作时,请使用按位运算符。
答案 1 :(得分:0)
按位操作尤其是XOR很重要,可以避免在这个采访问题中出现溢出。 XOR也是许多加密/校验和算法的基础。 here是一个很好的介绍视频,讨论位操作(从InterviewBit复制的视频链接)。