错误的集合-简单
难度:简单
题目描述:
集合 S 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。
给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例:
输入: nums = [1, 2, 2, 4];
输出: [2, 3];
1
2
2
解题思路:
利用 Map 对象求出重复数 repeat,
丢失的数字 = [1,2..n] 正确数组的和 rightSum - (错误数组[1,2,m,m...n]的和 wrongSum - 重复数 repeat )
var findErrorNums = function (nums) {
let len = nums.length;
let repeat;
let lost;
let map = new Map();
let wrongSum = 0;
let rightSum = ((1 + len) * len) / 2;
for (let i = 0; i < len; i++) {
if (!map.has(nums[i])) {
map.set(nums[i], true);
} else {
repeat = nums[i];
}
wrongSum += nums[i];
}
lost = rightSum - (wrongSum - repeat);
return [repeat, lost];
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
← 有效的字母异位词-简单 寻找重复数-中等 →