给出一个由N个整数组成的非空数组A。该数组包含奇数个元素,数组中的每个元素都可以与另一个具有相同价值的元素配对,只有一个元素没有配对。
例如,在数组A中,如:
a[0] = 9 a[1] = 3 a[2] = 9
A[3] = 3 A[4] = 9 A[5] = 7
A[6] = 9
索引0和2的元素的值是9。
索引1和3的元素的值是3。
索引4和6的元素的值是9。
索引5的元素的值是7,并且是未配对的。
写一个函数,给定一个由满足上述条件的N个整数组成的数组A,返回未配对元素的值。
代码如下:
def odd(a):
counts = {}
# 循环浏览数组中的每个元素
for num in a:
# 如果这个值还没有在字典里,就用1的计数把它加进去。
if num not in counts:
counts[num] = 1
# 如果该值已经在字典中,则增加其计数
else:
counts[num] += 1
# 循环浏览字典,找到计数为1的键
for key in counts:
if counts[key] % 2 == 1:
# 返回键,也就是未配对的元素
return key
总结:
这次运用字典来计数和检索,通过字典的1对1检索特性,可以减少代码的时间复杂度
原本运用的是双层的for循环来解决这个问题,但是这样做的时间复杂度为O(n**2),在大数组情况下耗费的时间太多了
count函数可以返回数组中特定元素出现的次数,如:
a = [1, 2, 4, 2, 1]
a.count(1) #输出结果为2,即1出现了两次
要继续努力!