列表

详情


442. 数组中重复的数据

给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次两次 。请你找出所有出现 两次 的整数,并以数组形式返回。

你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。

 

示例 1:

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

示例 2:

输入:nums = [1,1,2]
输出:[1]

示例 3:

输入:nums = [1]
输出:[]

 

提示:

相似题目

找到所有数组中消失的数字

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> findDuplicates(vector<int>& nums) { } };

golang 解法, 执行用时: 40 ms, 内存消耗: 7.5 MB, 提交时间: 2022-11-16 12:53:22

func findDuplicates(nums []int) (ans []int) {
    for i := range nums {
        for nums[i] != nums[nums[i]-1] {
            nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
        }
    }
    for i, num := range nums {
        if num-1 != i {
            ans = append(ans, num)
        }
    }
    return
}

golang 解法, 执行用时: 44 ms, 内存消耗: 7.4 MB, 提交时间: 2022-11-16 12:53:08

func findDuplicates(nums []int) (ans []int) {
    for _, x := range nums {
        if x < 0 {
            x = -x
        }
        if nums[x-1] > 0 {
            nums[x-1] = - nums[x-1]
        } else {
            ans = append(ans, x)
        }
    }
    return
}

python3 解法, 执行用时: 96 ms, 内存消耗: 21.3 MB, 提交时间: 2022-11-16 12:52:52

class Solution:
    def findDuplicates(self, nums: List[int]) -> List[int]:
        ans = []
        for x in nums:
            x = abs(x)
            if nums[x - 1] > 0:
                nums[x - 1] = -nums[x - 1]
            else:
                ans.append(x)
        return ans

python3 解法, 执行用时: 60 ms, 内存消耗: 22.8 MB, 提交时间: 2022-11-16 12:51:24

class Solution:
    def findDuplicates(self, nums: List[int]) -> List[int]:
        c = Counter(nums)
        return [k for k, _ in c.items() if _ == 2]

上一题