@xlsd1996
2018-03-11T07:05:21.000000Z
字数 808
阅读 715
题目链接:Find All Duplicates in an Array
题目描述:给一个包含
n
个数的数组a
,其中有的出现两次,有的出现一次,而且所有的数都满足1 <= a[i] <= n
,目标:找出所有出现重复的数,要求:不使用额外空间,时间复杂度O(n)
乍一看感觉需要先排序,然后遍历,然后想到 计数排序 这类排序方法的思想:把对应元素放到对应位置上
于是有一个解决方法:
-1
时,尝试 将这个数字与这个数字对应的索引地址上的数交换,否则指针向前-1
,指针继续向前步骤1
Python代码如下:
class Solution(object):
def findDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
i=0
res = []
while(i<len(nums)):
if(nums[i]!=-1 and nums[i] != i+1):
temp = nums[nums[i]-1]
if(nums[i]==temp):
res.append(temp)
nums[i]=-1
else:
nums[nums[i]-1] = nums[i]
nums[i] = temp
continue
i += 1
return res