题目: 有一个长度是101的数组,存有1 ~ 100这100个数字,其中一个是重复的。请设计一个算法找出这个重复的数字
#!/usr/bin/env python #-*- coding:utf-8 -*- arr1 = [5,2,1,9,6,2,8] arr2 = {}.fromkeys(arr1).keys() print arr2 #效率高,但不符合题目要求 arr3 = list(set(arr1)) print arr3 #效率更高,但仍然不符合题目要求 arr4 = sorted(arr1) i = len(arr4) - 1 for x in range(i): y = x + 1 if arr4[x] == arr4[y]: print arr4[x] #达到题目要求了,可惜面试时间已过 #当时怎么就没有想到用sorted这个方法呢 #还是自己技术太差了 #惭愧啊惭愧
#!/usr/bin/env python3 arr1 = [i for i in range(1,1000000)]+[500000] arr4 = set(arr1) print(sum(arr1)-sum(arr4))
#!/usr/bin/env python3 arr1 = [i for i in range(1,1000000)]+[500000] arr4 = sorted(arr1) i = len(arr4) - 1 for x in range(i): y = x + 1 if arr4[x] == arr4[y]: print(arr4[x])
分别测试,结果分别为0.53s和0.70s,我的算总和再相减的方法略快点,不过也不一定,看情况:
当重复值在出现在列表前几个元素,则列表内两两元素比较算法快,因为只需比较前几个元素就结束;但当重复值越往后,列表内两两元素比较的方法相应就更慢了~
转载请注明:爱开源 » Python 面试题