美文网首页
找出所有重复数(442)

找出所有重复数(442)

作者: 拔丝圣代 | 来源:发表于2018-03-01 22:09 被阅读0次

题目


一个长度为n的整数数组,其中的元素满足1 ≤ a[i] ≤ n。其中部分元素出现两次,另一部分出现一次。找出所有出现两次的元素。

要求:无需额外空间,时间复杂度为O(n)

例如

Input:
[4,3,2,7,8,2,3,1]

Output:
[2,3]

分析


首先想到的是用一个集合记录已经出现过的元素,问题在于不能用额外空间,只能在现有数组上做文章。注意到元素的范围是[1, n],正好可以对应数组的下标[0, n-1],因此可以将出现过的元素减去1,得到数组下标,其对应的元素乘以-1的方法来记录。

算法


扫描所给数组nums每一个元素,进行以下操作:

  1. 元素取绝对值后减去1,得到下标i
  2. nums[i]为正,乘以-1,否则添加到结果中。

代码


class Solution(object):
    def findDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        ans = []
        for i, n in enumerate(nums):
            if nums[abs(n)-1] < 0:
                ans.append(abs(n))
            else:
                nums[abs(n)-1] *= -1
        return ans

相关文章

  • 找出所有重复数(442)

    题目 一个长度为n的整数数组,其中的元素满足1 ≤ a[i] ≤ n。其中部分元素出现两次,另一部分出现一次。找出...

  • 重复数据处理

    3.2.2重复数据处理; 用几种不同的方法可以找出一张表中的重复数据 1.对区域中满足单个制定条件的单元格进行计数...

  • Excel学习二

    3.2.2重复数据处理; 用几种不同的方法可以找出一张表中的重复数据 1.对区域中满足单个制定条件的单元格进行计数...

  • 找出重复数(287)

    问题 一个长度为n+1的整数数组,其中的元素为[1, n]的整数,其中有一个元素出现两次或更多次,其他元素只出现一...

  • LeetCode 442.找出数组中所有重复的数字

    问题 问题描述:给定一个整数数组,1 <= a[i] <= n,其中 n 为数组长度。有些元素出现 2 次,有些只...

  • 算法----找出重复数字

    在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个...

  • 如何使用drop_duplicates进行简单去重

    一本正经胡说八道的猫 什么是去重呢?简单来说,数据去重指的是删除重复数据。在一个数字文件集合中,找出重复的数据并将...

  • LintCode 16. 带重复元素的排列

    题目描述 给出一个具有重复数字的列表,找出列表所有不同的排列。 测试样例 输入:[1,1]输出:[ [1,1]] ...

  • 8.pandas 剔除重复

    生成数据 去重操作 重复数据

  • Oracle数据库中重复数据删除方法:部分去重+完全去重

    Oracle数据库重复的数据一般有两种去重方法,一、完全重复数据去重;二、部分字段数据重复去重。 一、完全重复数据...

网友评论

      本文标题:找出所有重复数(442)

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