Leetcode Link: 442. 数组中重复的数据 - 力扣(LeetCode)
题目

解法一
思路: 类似计数排序
题解: 时间 , 空间
class Solution:
def findDuplicates(self, nums: List[int]) -> List[int]:
res = []
idx = 0
while(idx<len(nums)):
val = nums[idx]
if val == idx + 1:
idx += 1
continue
if val == nums[val-1]:
res.append(nums[idx])
idx += 1
else:
nums[idx], nums[val-1] = nums[val-1], nums[idx]
return list(set(res))解法二
思路: 或者遇到的就标记。不用换位,自己本身就当作标记数组了 即自己标记自己。对应位置的正负表示索引val遇到了没有。
题解:
class Solution:
def findDuplicates(self, nums: List[int]) -> List[int]:
res = []
for val in nums:
if nums[val - 1] > 0:
nums[val - 1] = -nums[val - 1]
else:
res.append(val)
return res