新聞中心
這篇文章主要介紹了leetcode怎么查看數(shù)組中重復(fù)的數(shù)字,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
屏南網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,屏南網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為屏南近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個(gè)售后服務(wù)好的屏南做網(wǎng)站的公司定做!
題目鏈接
https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/
題目描述
找出數(shù)組中重復(fù)的數(shù)字。
在一個(gè)長度為 n 的數(shù)組 nums 里的所有數(shù)字都在 0 ~ n-1 的范圍內(nèi)。數(shù)組中某些數(shù)字是重復(fù)的,
但不知道有幾個(gè)數(shù)字重復(fù)了,也不知道每個(gè)數(shù)字重復(fù)了幾次。請找出數(shù)組中任意一個(gè)
重復(fù)的數(shù)字。
示例 1:
輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
限制:
2 <= n <= 100000
解題方案
思路 1
標(biāo)簽:哈希 使用 HashSet 來進(jìn)行處理,因?yàn)?HashSet 本身不允許出現(xiàn)重復(fù)元素,所以 當(dāng)添加元素失敗或已經(jīng)包含該數(shù)字時(shí),則表示出現(xiàn)了重復(fù)元素,將其返回即可。思路較為簡單,就不給圖了 時(shí)間復(fù)雜度:O(n),空間復(fù)雜度:O(n)
代碼 1
Java 版本
class Solution {
public int findRepeatNumber(int[] nums) {
Set numsSet = new HashSet<>();
for(int num: nums) {
if(!numsSet.add(num)) {
return num;
}
}
return -1;
}
}
JavaScript 版本
/**
* @param {number[]} nums
* @return {number}
*/
var findRepeatNumber = function(nums) {
const numsSet = new Set();
for(const num of nums) {
if(numsSet.has(num)) {
return num;
} else {
numsSet.add(num);
}
}
return -1;
};
思路 2
標(biāo)簽:哈希 從題目描述中我們可以看出,因?yàn)樗袛?shù)字都在 0 ~ n-1 的范圍內(nèi),其實(shí)完全可以省掉額外的空間開辟,將每個(gè)位置的數(shù)交換映射到其對應(yīng)的數(shù)組下標(biāo)下面,當(dāng)出現(xiàn)新的元素與其對應(yīng)的下標(biāo)中的數(shù)字相等時(shí),即為重復(fù)數(shù)字 這本質(zhì)還是哈希的思想,思路 1 是使用庫函數(shù)申請額外空間,思路 2 則是數(shù)組本身做哈希表,達(dá)到了節(jié)省空間的目的 此處會(huì)用到 while 循環(huán),原因是保證交換過來的新元素位置也要正確 時(shí)間復(fù)雜度:O(n),空間復(fù)雜度:O(1)
代碼 2
Java 版本
class Solution {
public int findRepeatNumber(int[] nums) {
int len = nums.length;
for (int i = 0; i < len; i++) {
while (nums[i] != i) {
if (nums[i] == nums[nums[i]]) {
return nums[i];
}
int temp = nums[i];
nums[i] = nums[temp];
nums[temp] = temp;
}
}
return -1;
}
}
JavaScript 版本
/**
* @param {number[]} nums
* @return {number}
*/
var findRepeatNumber = function(nums) {
const len = nums.length;
for (let i = 0; i < len; i++) {
while (nums[i] != i) {
if (nums[i] == nums[nums[i]]) {
return nums[i];
}
const temp = nums[i];
nums[i] = nums[temp];
nums[temp] = temp;
}
}
return -1;
};
畫解 2
橫滑見完整畫解



感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“l(fā)eetcode怎么查看數(shù)組中重復(fù)的數(shù)字”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
名稱欄目:leetcode怎么查看數(shù)組中重復(fù)的數(shù)字
網(wǎng)址分享:http://fisionsoft.com.cn/article/jghojs.html