题解 | #数组中只出现一次的两个数字#
数组中只出现一次的两个数字
http://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param array int整型一维数组
# @return int整型一维数组
#
class Solution:
def splitArrayByBit(self, idx, array):
arr1 = []
arr2 = []
for item in array:
v = item & 1<<idx
if v != 0:
arr1.append(item)
else:
arr2.append(item)
return arr1, arr2
def FindNumsAppearOnce(self , array ):
# write code here
lenA = len(array)
if lenA <= 0:
return None
v = array[0]
for idx, item in enumerate(array):
if idx == 0:
continue
v = v^item
for i in range(0, 32):
r = v & (1 << i)
print("r:",r)
if r != 0:
break
ret1, ret2 = self.splitArrayByBit(i, array)
v1 = ret1[0]
v2 = ret2[0]
for idx, item in enumerate(ret1):
if idx == 0:
continue
v1 = v1 ^ item
for idx, item in enumerate(ret2):
if idx == 0:
continue
v2 = v2 ^ item
return sorted([v1, v2])
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param array int整型一维数组
# @return int整型一维数组
#
class Solution:
def splitArrayByBit(self, idx, array):
arr1 = []
arr2 = []
for item in array:
v = item & 1<<idx
if v != 0:
arr1.append(item)
else:
arr2.append(item)
return arr1, arr2
def FindNumsAppearOnce(self , array ):
# write code here
lenA = len(array)
if lenA <= 0:
return None
v = array[0]
for idx, item in enumerate(array):
if idx == 0:
continue
v = v^item
for i in range(0, 32):
r = v & (1 << i)
print("r:",r)
if r != 0:
break
ret1, ret2 = self.splitArrayByBit(i, array)
v1 = ret1[0]
v2 = ret2[0]
for idx, item in enumerate(ret1):
if idx == 0:
continue
v1 = v1 ^ item
for idx, item in enumerate(ret2):
if idx == 0:
continue
v2 = v2 ^ item
return sorted([v1, v2])


查看8道真题和解析