题目描述:
在一个长度为n的数组里的所有数组都在0~n-1的范围之内,数组中某些元素是重复的,但是不知道有几个数字重复了,也不知道重复了几次,找出数组中重复的数字。
思路1:对数组进行排序,从排序数组中找到重复元素是很简单的,但是排序一个数组需要O(nlogn)的时间
思路2:建立哈希表,判断元素是否在哈希表内,但是这样需要O(n)的空间复杂度
思路3:是否能做到不使用额外的空间完成这一任务呢,思路是比较数组元素值和其下标,如果不同,则将其换到与下标相同的位置,如果位置上的元素值与即将换过来的值相同,则为重复元素
def duplicate(nums):
res = []
if len(nums) == 0:
return False
for i in range(len(nums)):
if nums[i] < 0 or nums[i] > len(nums):
return False
for i in range(len(nums)):
while(nums[i]) != i:
if nums[i] == nums[nums[i]]:
res.append(nums[i])
return True
tmp = nums[i]
nums[i] = nums[tmp]
nums[tmp] = tmp
return False
if __name__ == '__main__':
nums = [0,2,3,4,4]
a = duplicate(nums)
print(a)