O(1) Space problem
Single Number
大意
在一个数组中,有一个数字只出现了一次,其他的数字都出现了两次,求在O(1)
的额外空间
和O(n)
的额外时间内如何求出只出现一次的数字。
思路
对于出现两次的数字x,有如下的性质
对所有的数字进行一次异或,最终剩下的数字就是那个只出现了一次的数字
code
C++ version
1 | class Solution { |
Single Number II
大意
在一个数组中,有一个数字只出现了一次,其他的数字都出现了3次,求在O(1)
的额外空间和
O(n)
的时间内如何求出只出现一次的数字。
思路
对于出现3次的数字,有如下的性质
$x&(~x) = 0, x^x = 0 $
对于下面的操作,进行三次的时候必然只会为0。
1 | one = (one^i)&(~two); |
1 | x 0 |
Single Number III
大意
在一个数组中,有两个数字只出现了一次,其他的数字都出现了两次,求这两个数字
思路
假设我们那两个数字是,和第一问一样,我们直接进行全部数字的异或得到的就是
对于,我们可以得到最后一位为1的位置,即A和B的第一个不同的位置。。
对于数组里面的全部数字,根据次位是否为1来进行分别异或。
code
C++ version
1 | class Solution { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.