LeetCode统计数组中的个数645

125 阅读1分钟

🍀 错误的集合

描述:

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

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

示例 1:
输入:nums = [1,2,2,4]
输出:[2,3]

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

提示:
2 <= nums.length <= 104
1 <= nums[i] <= 104

思考:

​ 划重点!丢失一个数字以及一个数字重复

​ 看到这个题突然想起来去年备考时候,王道数据结构线性表课后题有道代码题,好像用的是计数器,这个题应该也可以用计数器来解决。

​ 再设置一个数组,数组长度是nums长度+1,因为nums递增,让nums中的数在sign中做标记。

实现:

package cn.edu.gzhu.array.findErrorNums;

public class Solution {

    // 输出重复的字和应填入的字
    public int[] findErrorNums(int[] nums) {

        int[] result = new int[2];
        // 长度从+1
        int[] sign = new int[nums.length+1];

        // 在sign中做标记
        for (int i: nums) {
            sign[i]++;
        }

        for (int i = 1; i<sign.length; i++) {

            if (sign[i] == 2) {             // 重复的数自增了两次
                result[0] = i;
            } else if (sign[i] == 0) {      // 缺额的数没有自增
                result[1] = i;
            }
        }

        return result;

    }


}

测试一下!

image.png

大佬的代码:

我觉得我这个就不错,哈哈哈哈哈哈!1ms!