美文网首页
442. 数组中重复的数据(Python)

442. 数组中重复的数据(Python)

作者: 玖月晴 | 来源:发表于2020-10-09 18:54 被阅读0次

    题目

    难度:★★☆☆☆
    类型:数组
    方法:哈希表

    力扣链接请移步本题传送门
    更多力扣中等题的解决方案请移步力扣中等题目录

    给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。

    找到所有出现两次的元素。

    你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?

    示例:

    输入:
    [4,3,2,7,8,2,3,1]

    输出:
    [2,3]

    解答

    我们使用O(n)的时间复杂度和O(1)的空间复杂度来解决这个问题。

    思路:注意题目给定的条件,1 ≤ a[i] ≤ n,数组中每一个元素是满足上界和下界条件的。我们可以这样考虑,遍历数组中每一个元素,以该元素的数值作为下标索引,将该索引对应的数组中的元素取相反数,对于数组中重复的元素,则第二次遍历到该元素时,以该元素为索引在数组中对应的元素一定是负数,添加到结果即可。

    需要注意,这里每个元素的范围是1到n,我们需要通过减一变换到不会使数组溢出的范围0到n-1,另外,由于遍历过程中可能存在负数,我们取索引时需要考虑到这一情况,取其相反数。

    class Solution:
        def findDuplicates(self, nums):
            if not nums:
                return []
    
            res = []
            index = 0
            while index < len(nums):
                num = nums[index]
                point = abs(num) - 1
                if nums[point] < 0:
                    res.append(abs(num))
                nums[point] = -nums[point]
                index += 1
            return res
    

    如有疑问或建议,欢迎评论区留言~

    有关更多力扣中等题的python解决方案,请移步力扣中等题解析

    相关文章

      网友评论

          本文标题:442. 数组中重复的数据(Python)

          本文链接:https://www.haomeiwen.com/subject/zyfrpktx.html