顺序扫描数组,利用哈希表记录是否出现过: 时间复杂度 O(n)
O
(
n
)
空间复杂度 O(n)
O
(
n
)
顺序扫描数组,在数组对应位置i上看数字是否为i:
若是,则继续扫描下一个
若不是,记数字为m,比较i与m位置的数字:
若相等,则找到重复数字
若不相等,则交换i与m,m位置上数字已经确定,继续以上操作 时间复杂度:O(n)
O
(
n
)
空间复杂度 O(1)
O
(
1
)
classSolution:def_init_(self):pass# 防止无效输入defvalid_check(self, a):if len(a) == 0:
returnFalsefor i in range(len(a)):
if a[i] < 0or a[i] > len(a) - 1:
returnFalsereturnTruedefMethod_1(self, a):if valid_check(a):
a = sorted(a)
for i in range(len(a) - 1):
if a[i] == a[i + 1]:
return a[i]
else: returnFalsedefMethod_2(self, a):if valid_check(a):
num_array = np.zeros(len(a))
for i in range(len(a)):
if num_array[a[i]] == 0:
num_array[a[i]] += 1else:
return a[i]
else: returnFalsedefMethod_3(self, a):if valid_check(a):
for i in range(len(a)):
while a[i] != i:
if a[a[i]] == a[i]:
return a[i]
else:
a[a[i]], a[i] = a[i], a[a[i]]
else: returnFalse