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