"""
数组中有N + 2个数,其中,N个数出现了偶数次,2个数出现了奇数次(这两个数不相等),找出这两个数。注意:不需要知道具体位置,只需要找出这两个数。
"""
def get2Num1(arr):
"""
这种方法对数组进行一次遍历,时间复杂度为O(n),但是申请了额外的存储过程来记录数据出现的情况,因此,空间复杂度为O(n)。
"""
if arr is None or len(arr) < 1:
print('参数不合理')
return
dic = dict()
i = 0
while i < len(arr):
# dic中没有这个数字,说明第一次出现,value赋值为True
if arr[i] not in dic:
dic[arr[i]] = True
# 当前遍历的值在dic中存在,说面前面出现过,value赋值为前一次的相反数
else:
dic[arr[i]] = not dic[arr[i]]
i += 1
for k, v in dic.items():
if v:
print(k)
if __name__ == '__main__':
arr = [3, 5, 6, 6, 5, 7, 2, 2, 2, 5]
get2Num1(arr)
运行结果为:
3
5
7
2
本文介绍了一种在数组中寻找两个出现奇数次元素的方法,通过一次遍历和使用字典记录每个元素出现情况,实现了O(n)的时间复杂度。
413

被折叠的 条评论
为什么被折叠?



