【LeetCode-剑指Offer系列】03 |刷题打卡

149 阅读1分钟

题目描述

找出数组中重复的数字。

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

思路

1.哈希

利用Set,因为Set添加元素时,会自动忽略重复的元素,如果长度没有增加,就输出当前元素就好

var findRepeatNumber = function(nums) {
    const occ = new Set();
    for(var i in nums){
		var length = occ.size;
        occ.add(nums[i]);
        if(occ.size == length)
        	return nums[i]
	}
};

2.利用对象

利用下标和值的方式模拟map的对应关系

var findRepeatNumber = function(nums) {
   let numMap = {};
   for(var i = 0; i<nums.length;i++){
   	  if(numMap[nums[i]]!==undefined){
      	return nums[i]
      }else{
      	numMap[nums[i]]=1
      }
   }
};

总结:

一般有关重复的元素,都需要去查找有无这个重复元素的位置,这时候如果用一般的方法去查找,会增加时间复杂度。最好用哈希来做。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看【 活动详情】