數(shù)組中重復(fù)的數(shù)字

題目描述

在一個(gè)長(zhǎng)度為n的數(shù)組里的所有數(shù)字都在0到n-1的范圍內(nèi)谋竖。 數(shù)組中某些數(shù)字是重復(fù)的尚蝌,但不知道有幾個(gè)數(shù)字是重復(fù)的瑟幕。也不知道每個(gè)數(shù)字重復(fù)幾次磕蒲。請(qǐng)找出數(shù)組中任意一個(gè)重復(fù)的數(shù)字。 例如只盹,如果輸入長(zhǎng)度為7的數(shù)組{2,3,1,0,2,5,3}辣往,那么對(duì)應(yīng)的輸出是第一個(gè)重復(fù)的數(shù)字2。

時(shí)間限制:1秒 空間限制:32768K

public class Solution {
    // Parameters:
    //    numbers:     an array of integers
    //    length:      the length of array numbers
    //    duplication: (Output) the duplicated number in the array number,length of duplication array is 1,so using duplication[0] = ? in implementation;
    //                  Here duplication like pointor in C/C++, duplication[0] equal *duplication in C/C++
    //    這里要特別注意~返回任意重復(fù)的一個(gè)殖卑,賦值duplication[0]
    // Return value:       true if the input is valid, and there are some duplications in the array number
    //                     otherwise false
    public boolean duplicate(int numbers[],int length,int [] duplication) {
    
    }
}

解題思路

1站削、使用LinkedHashSet:既保持元素的插入順序又保證了查找元素的效率

import java.util.LinkedHashSet;
public class Solution {
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        LinkedHashSet<Integer> hs=new LinkedHashSet<>();
        for(int i=0;i<length;i++){
            if(!hs.isEmpty()&&hs.contains(numbers[i])){
                duplication[0]=numbers[i];
                return true;
            }
            hs.add(numbers[i]);
        }
        return false;
    }
}

2、利用特性
見(jiàn)https://blog.nowcoder.net/n/808e31c3b2424647a3743aad6e2831e7?f=comment

數(shù)組的長(zhǎng)度為 n 且所有數(shù)字都在 0 到 n-1 的范圍內(nèi)孵稽,我們可以將每次遇到的數(shù)進(jìn)行"歸位"钻哩,當(dāng)某個(gè)數(shù)發(fā)現(xiàn)自己的"位置"被相同的數(shù)占了屹堰,則出現(xiàn)重復(fù)。
掃描整個(gè)數(shù)組街氢,當(dāng)掃描到下標(biāo)為 i 的數(shù)字時(shí)扯键,首先比較該數(shù)字(m)是否等于 i,如果是珊肃,則接著掃描下一個(gè)數(shù)字荣刑;如果不是,則拿 m 與第 m 個(gè)數(shù)比較伦乔。如果 m 與第 m 個(gè)數(shù)相等厉亏,則說(shuō)明出現(xiàn)重復(fù)了;如果 m 與第 m 個(gè)數(shù)不相等烈和,則將 m 與第 m 個(gè)數(shù)交換爱只,將 m "歸位",再重復(fù)比較交換的過(guò)程招刹,直到發(fā)現(xiàn)重復(fù)的數(shù)

舉個(gè)栗子:

以數(shù)組 {2,3,1,0,2,5,3} 為例
當(dāng) i = 0 時(shí)恬试,nums[i] = 2 != i,判斷 nums[i] 不等于 nums[nums[i]]疯暑,交換 nums[i] 和 nums[nums[i]]训柴,交換后數(shù)組為:{1,3,2,0,2,5,3}
此時(shí) i = 0,nums[i] = 1 != i妇拯,判斷 nums[i] 不等于 nums[nums[i]]幻馁,交換 nums[i] 和 nums[nums[i]],交換后數(shù)組為:{3,1,2,0,2,5,3}
此時(shí) i = 0越锈,nums[i] = 3 != i仗嗦,判斷 nums[i] 不等于 nums[nums[i]],交換 nums[i] 和 nums[nums[i]]甘凭,交換后數(shù)組為:{0,1,2,3,2,5,3}
此時(shí) i = 0儒将,nums[i] = 0 = i,繼續(xù)下一組
當(dāng) i = 1对蒲,nums[i] = 1 = i钩蚊,繼續(xù)下一組
當(dāng) i = 2,nums[i] = 2 = i蹈矮,繼續(xù)下一組
當(dāng) i = 3砰逻,nums[i] = 3 = i,繼續(xù)下一組
當(dāng) i = 4泛鸟,nums[i] = 2 != i蝠咆,判斷 nums[i] 等于 nums[nums[i]],出現(xiàn)重復(fù),賦值返回

public class Solution {
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        if(numbers == null || length == 0){
            return false;
        }
        for(int i=0;i<length;i++){
            while(numbers[i] != i){
                if(numbers[i] == numbers[numbers[i]]){
                    duplication[0] = numbers[i];
                    return true;
                }
                // swap
                int tmp = numbers[i];
                numbers[i] = numbers[tmp];
                numbers[tmp] = tmp;
            }
        }
        return false;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刚操,一起剝皮案震驚了整個(gè)濱河市闸翅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菊霜,老刑警劉巖坚冀,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鉴逞,居然都是意外死亡记某,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門构捡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)液南,“玉大人,你說(shuō)我怎么就攤上這事勾徽』梗” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵喘帚,是天一觀的道長(zhǎng)畅姊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)啥辨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任盯腌,我火速辦了婚禮溉知,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腕够。我一直安慰自己级乍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布帚湘。 她就那樣靜靜地躺著玫荣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪大诸。 梳的紋絲不亂的頭發(fā)上捅厂,一...
    開(kāi)封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音资柔,去河邊找鬼焙贷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贿堰,可吹牛的內(nèi)容都是我干的辙芍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼故硅!你這毒婦竟也來(lái)了庶灿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吃衅,失蹤者是張志新(化名)和其女友劉穎往踢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體捐晶,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菲语,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惑灵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片山上。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖英支,靈堂內(nèi)的尸體忽然破棺而出佩憾,到底是詐尸還是另有隱情,我是刑警寧澤干花,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布妄帘,位于F島的核電站,受9級(jí)特大地震影響池凄,放射性物質(zhì)發(fā)生泄漏抡驼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一肿仑、第九天 我趴在偏房一處隱蔽的房頂上張望致盟。 院中可真熱鬧,春花似錦尤慰、人聲如沸馏锡。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杯道。三九已至,卻和暖如春责蝠,著一層夾襖步出監(jiān)牢的瞬間党巾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工霜医, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昧港,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓支子,卻偏偏與公主長(zhǎng)得像创肥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 找出數(shù)組中重復(fù)的數(shù)字 在一個(gè)長(zhǎng)度為n的數(shù)組里的所有數(shù)字都在0~n-1的范圍內(nèi)叹侄。數(shù)組中某些數(shù)字是重復(fù)的巩搏,但不知道有幾...
    Longshihua閱讀 599評(píng)論 0 3
  • 題目一: 在一個(gè)長(zhǎng)度為n的數(shù)組里的所有數(shù)字都在0到n-1的范圍內(nèi)。數(shù)組中某些數(shù)字是重復(fù)的趾代,但不知道有幾個(gè)數(shù)字重復(fù)了...
    淺淺星空閱讀 289評(píng)論 0 2
  • 最近在刷題贯底,準(zhǔn)備記錄一些值得參考的題目,也希望通過(guò)這種方式可以讓自己印象更加深刻撒强,本篇文章將討論 數(shù)組中重復(fù)的數(shù)字...
    AaricChen閱讀 245評(píng)論 0 1
  • 寫在前面 c++的確是需要一直學(xué)習(xí)一直積累的編程語(yǔ)言禽捆! 1、數(shù)組初始化列表中的元素個(gè)數(shù)小于指定的數(shù)組長(zhǎng)度時(shí)飘哨,不足的...
    wensong_kevin閱讀 215評(píng)論 0 0
  • 面試題 3 - 1:數(shù)組中重復(fù)的數(shù)字 題意:給定一個(gè)數(shù)組nums胚想,長(zhǎng)度為n,其數(shù)值范圍在0~n-1之間芽隆,其中可能存...
    hxy159閱讀 122評(píng)論 0 0