zoukankan      html  css  js  c++  java
  • 每日一题力扣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
  • 相关阅读:
    ES5数组扩展
    ES5给object扩展的一些静态方法
    poj2531-dfs
    快排
    阶段性总结-贪心算法
    日常算法题
    poj1979 解题报告
    poj 2586
    poj3069
    poj2709 解题报告
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14444233.html
Copyright © 2011-2022 走看看