抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

题目描述

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

给定一个数组 nums 代表了集合 S 发生错误后的结果。

请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

实例

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

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

解题方法

使用计数排序的思想,创建一个等长的数组,用来记录原数组中的所有数出现的次数。

复杂度分析

时间复杂度:

空间复杂度:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int[] findErrorNums(int[] nums) {
// 0 存储重复出现的数,1 存储丢失的数
int[] result = new int[2];
int[] array = new int[nums.length + 2];
for (int i : nums) {
// 如果不为 0,则表示该数已经出现过,进行记录
if (array[i] != 0) {
result[0] = i;
}
array[i] = 1;
}
for (int i = 1; i < array.length; i++) {
// 如果为 0 则表示该数没有出现过,进行记录
if (array[i] == 0) {
result[1] = i;
System.out.println(i);
//找到就推出循环
break;
}
}
return result;
}
}

用户交流区

温馨提示: 遵纪守法, 友善评论!





津ICP备19009605号

WordCount24k