📅  最后修改于: 2023-12-03 15:40:02.642000             🧑  作者: Mango
给定一个数组,数组中有且只有两个奇数,其他都是偶数。找出这两个奇数并返回它们发生的位置,同时输出所有其他偶数发生的时间。要求时间复杂度为 $O(n)$。
针对这个问题,可以采用异或运算来实现。具体步骤如下:
代码如下:
def find_odd_numbers(arr):
xor = 0
for num in arr:
xor ^= num
# 找到两个奇数异或和的二进制表示中从右向左数第一个 1 的位置
k = 0
while xor & 1 == 0:
xor >>= 1
k += 1
# 分别对两个部分进行异或操作,得到结果就是这两个奇数
a, b = 0, 0
for num in arr:
if (num >> k) & 1 == 1:
a ^= num
else:
b ^= num
return a, b
此外,我们还需要输出所有其他偶数发生的时间,这个比较简单,直接遍历数组即可。
代码如下:
def find_even_numbers(arr):
even_nums = []
for num in arr:
if num % 2 == 0:
even_nums.append(num)
else:
continue
return even_nums
本文介绍了在给定数组中查找两个奇数的位置并输出所有其他偶数的位置的方法。该方法采用了异或运算来实现,时间复杂度为 $O(n)$。同时,我们还介绍了输出其他偶数位置的方法,该方法同样具有线性时间复杂度。