數組中重復的數字(js實現)


題目

在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是第一個重復的數字2。

 

思路

利用對象或者散列表或者下標檢測

 

// 推薦解法
function duplicate(numbers, duplication)
{
// write code here
//這里要特別注意~找到任意重復的一個值並賦值到duplication[0]
//函數返回True/False
let hash = []
for (let i = 0; i < numbers.length; i++) {
  if (!hash[numbers[i]]) {
    hash[numbers[i]] = 1
  } else {
    if (++hash[numbers[i]] === 2) {
      duplication[0] = numbers[i]
      return true
    }
  }
}
return false
}

 

// 解法1:下標檢測
function duplicate(numbers, duplication)
{
// write code here
//這里要特別注意~找到任意重復的一個值並賦值到duplication[0]
//函數返回True/False
let obj = {}
for(let i = 0; i < numbers.length; i++) {
  if(numbers.indexOf(numbers[i]) !== i) {
    duplication[0] = numbers[i]
    return true
  }
}
return false
}

 

// 解法2:對象特性
function duplicate(numbers, duplication)
{
// write code here
//這里要特別注意~找到任意重復的一個值並賦值到duplication[0]
//函數返回True/False
let obj = {}
for (let i = 0; i < numbers.length; i++) {
  if (!obj[numbers[i]]) {
    obj[numbers[i]] = true
  } else {
    duplication[0] = numbers[i]
    return true
  }
}
return false
}

 

// 解法3:哈希散列法,其實原理和obj差不多
function duplicate(numbers, duplication)
{
// write code here
//這里要特別注意~找到任意重復的一個值並賦值到duplication[0]
//函數返回True/False
let hash = []
for (let i = 0; i < numbers.length; i++) {
  if (!hash[numbers[i]]) {
    hash[numbers[i]] = 1
  } else {
    if (++hash[numbers[i]] === 2) {
      duplication[0] = numbers[i]
      return true
    }
  }
}
return false
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM