Leetcode每日一题-查找数组中重复的数组

627 阅读1分钟

题目描述

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

解答

解法一:排序

先将数组排序,再查找重复数字

var findRepeatNumber = function(nums) {
  nums.sort((a, b) => a - b)
  let pre = nums[0]
  for (let i = 1; i < nums.length; i++) {
    if (pre == nums[i]) {
      return pre
    } else {
      pre = nums[i]
    }
  }
}

解法二:哈希表

  • 哈希表的结构是:number-boolean,number 就是数组中的数字,boolean 代表数字是否出现过。

  • 整体的流程是:遍历数组中的数字,检查是否出现过

    • 如果没有出现,则标记这个数为true
    • 如果出现过,那么返回此数字
var findRepeatNumber = function(nums) {
    const map = {};
    for (const num of nums) {
        if (!map[num]) {
            map[num] = true;
        } else {
            return num;
        }
    }
};

好像哈希表执行时间确实快很多,但是平时写代码用的很少,我去翻相关资料补习一下啦~~

js与哈希表