🍀 错误的集合
描述:
# 集合 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;
}
}
测试一下!
大佬的代码:
我觉得我这个就不错,哈哈哈哈哈哈!1ms!