数组中重复的数字

方法一

哈希表/Set

方法二:原地交换

数组元素的索引和值是一对多的关系
因此可以遍历数组并通过交换操作,使元素的索引与值一一对应,即nums[i]=i。就可以通过索引映射对应的值,起到与字典等价的作用。

遍历中,第一次遇到数字x时,将其交换至索引x处,而当第二次遇到数字x时,一定有numsp[x] = x,此时就可以得到一组重复的数字

var findRepeatNumber1 = function (nums) {
  const obj = {}  
  for (const i of nums) {
    if (!obj[i]) {
      obj[i] = true
    } else {
      return i
    }
  }
}

var findRepeatNumber2 = function (nums) {
  for (let i = 0; i < nums.length; i++) {
    if (i === nums[i]) {
      continue
    } else {
      let temp = nums[nums[i]]
      if (temp === nums[i]) {
        return temp
      }
      nums[nums[i]] = nums[i]
      nums[i] = temp
    }
  }
}

console.log(findRepeatNumber2([2, 3, 1, 0, 2, 5, 3])); 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。