背景:
电话面试&手撕代码 2019.03.22 Mufasa
问题:
一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字
条件:
这串数字是有序数
解决方法:
核心代码只有4行
类似冒泡,但又不是冒泡只比较其中的偶数元素和偶数下一个元素,即:
d1 = -1
for i in range(int(len(d0) / 2)): if d0[i * 2] != d0[i * 2 + 1]: d1 = i * 2 break
如果没有查找到这个数(其实上面的遍历,直接忽略了最后一个数字),那么这个数字就是d0[-1],index = -1
代码实现:
1 # d0 输入数值,d1 index数值,d2 所求的出现一次的数值 2 # 时间复杂度为O(n),最优为1,最劣为n-1,空间复杂度为O(1) 3 d0 = [int(x) for x in input().split()] 4 d1 = -1 5 6 for i in range(int(len(d0) / 2)): 7 if d0[i * 2] != d0[i * 2 + 1]: 8 d1 = i * 2 9 break 10 11 d2 = d0[d1] # 其中d2即为所求数值 12 print(d2) 13 ''' 14 测试用例1: 15 输入:1 1 2 2 3 3 4 4 5 5 6 16 输出:6 17 18 测试用例2: 19 输入:1 1 2 2 3 4 4 5 5 20 输出:6 21 '''