错误的集合-简单

难度:简单

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

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

示例:

输入: nums = [1, 2, 2, 4];
输出: [2, 3];
1
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
最后更新时间: 4/29/2020, 8:20:39 PM