美文网首页
645. 错误的集合

645. 错误的集合

作者: 吃饭用盘装 | 来源:发表于2018-06-05 23:29 被阅读29次

    内容

    集合 S 包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。

    给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

    示例 1:

    输入: nums = [1,2,2,4]
    输出: [2,3]
    注意:

    给定数组的长度范围是 [2, 10000]。
    给定的数组是无序的。


    思路

    根据题意:集合S应该包含1-n的连续整数,但是此时有一个元素丢失导致其他元素有一个重复,那么这里如果排序,然后再找重复元素的话,复杂度为O(nlogn),但是可以利用额外的空间来使时间复杂度将为O(n)。
    将S中每个元素作为下标填入new Array(n)这个数组中,如果遍历到这个下标的位置一次,则这个位置的值+1。最后取出new Array(n)中对应值为0的下标和对应值为2的下标。


    代码

    /**
     * @param {number[]} nums
     * @return {number[]}
     */
    var findErrorNums = function (nums) {
        var n = nums.length;
        var array = new Array(n + 1).fill(0);
        for (var i = 0; i < nums.length; i++) {
            if (array[nums[i]] == null) {
                array[nums[i]] = 1;
            } else {
                array[nums[i]] += 1;
            }
        }
    
        var result = [];
        for (var i = 1; i < array.length; i++) {
            if (array[i] > 1) {
                result.push(i);
            }
        }
        for (var i = 1; i < array.length; i++) {
            if (array[i] == 0) {
                result.push(i);
            }
        }
        return result;
    };
    

    回到目录

    相关文章

      网友评论

          本文标题:645. 错误的集合

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