概述
题目描述:
- 在一个长度为n的数组里的所有数字都在0~n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数字中任意一个重复的数字。例如,如果输入长度为7的数字{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3.
解题思路:
- 直接对数组排序然后顺序遍历:时间复杂度 O(nlogn) O ( n l o g n )
- 顺序扫描数组,利用哈希表记录是否出现过: 时间复杂度 O(n) O ( n ) 空间复杂度 O(n) O ( n )
- 顺序扫描数组,在数组对应位置i上看数字是否为i:
- 若是,则继续扫描下一个
- 若不是,记数字为m,比较i与m位置的数字:
- 若相等,则找到重复数字
- 若不相等,则交换i与m,m位置上数字已经确定,继续以上操作
时间复杂度: O(n) O ( n ) 空间复杂度 O(1) O ( 1 )
class Solution:
def _init_(self):
pass
# 防止无效输入
def valid_check(self, a):
if len(a) == 0:
return False
for i in range(len(a)):
if a[i] < 0 or a[i] > len(a) - 1:
return False
return True
def Method_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: return False
def Method_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]] += 1
else:
return a[i]
else: return False
def Method_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: return False
最后
以上就是外向未来为你收集整理的python-2.找出数组中重复的数字的全部内容,希望文章能够帮你解决python-2.找出数组中重复的数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复