面试题3. 数组中重复的数字
思路一:构建一个空数组,将不重复的数字存入,遇到重复的输出,返回True即可

思路2:建立一个全为0的数组,长度等输入数组。将输入数组的数值对应到全0数组的索引中,若对应上加1,保证新数组每个元素<=1即可,也就是>1,证明重复
举例:A{1,2,3,3,4,5},刚开始B是{0,0,0,0,0,0},开始扫描A。
A[0] = 1 {0,1,0,0,0,0}
A[1] = 2 {0,1,1,0,0,0}
A[2] = 3 {0,1,1,1,0,0}
A[3] = 3 {0,1,1,2,0,0},到这一步,就已经找到了重复数字。
A[4] = 4 {0,1,1,2,1,0}
A[5] = 5 {0,1,1,2,1,1}
时间复杂度O(n),空间复杂度O(n),算法优点是简单快速,比用set更轻量更快,不打乱原数组顺序。

# -*- coding:utf-8 -*-
class Solution:
# 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
# 函数返回True/False
def duplicate(self, numbers, duplication):
# write code here
# 先做异常判断
if not numbers:
return False
length = len(numbers)
#创建全0的数组
assist = [0]*length
for i in numbers:
if assist[i] == 0:
assist[i] += 1
else:
duplication[0] = i
return True
return False

浙公网安备 33010602011771号