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