给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。
找到所有出现两次的元素。
你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-all-duplicates-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
错解:
刚刚做了448过来,发现这道题有坑,陷进去想了好久,直到找了张草稿纸自己算了一遍才发现大大的不对,这样的解法最后会包含【出现2次的】和【从未出现的】,我们想要的是【做了两次乘法后大于0的,而不是从一开始就大于0的】
class Solution: def findDuplicates(self, nums: List[int]) -> List[int]: for num in nums: nums[abs(num)-1]=-nums[abs(num)-1] return [k+1 for k,v in enumerate(nums) if v>0]
正解:
class Solution: def findDuplicates(self, nums: List[int]) -> List[int]: res=[] for num in nums: nums[abs(num)-1]=-nums[abs(num)-1] if nums[abs(num)-1]>0:#乘法后大于0 res.append(abs(num))
return res