每日一题力扣442有坑

给定一个整数数组 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

 

posted @ 2021-02-24 22:40  小千北同学超爱写代码  阅读(95)  评论(0编辑  收藏  举报