劍指Offer-數(shù)組中重復(fù)的數(shù)字

描述:

在一個長度為 n 的數(shù)組里的所有數(shù)字都在 0 到 n-1 的范圍內(nèi)蜈缤。數(shù)組中某些數(shù)字是重復(fù)的踩窖,但不知道有幾個數(shù)字是重復(fù)的翘县,也不知道每個數(shù)字重復(fù)幾次诺擅。請找出數(shù)組中任意一個重復(fù)的數(shù)字市袖。
例子如下:

Input:
{2, 3, 1, 0, 2, 5}

Output:
2

分析:

尋找數(shù)組中重復(fù)的數(shù)字,首先會想到的方法是遍歷一遍數(shù)組烁涌,然后記錄一下數(shù)組中每個元素出現(xiàn)的次數(shù)苍碟,若次數(shù)大于或等于2,則說明該元素重復(fù)撮执,這是使用暴力法來求解微峰。然而,這種情況下輔助數(shù)組的空間大量被浪費抒钱,導(dǎo)致空間復(fù)雜度非常高蜓肆。

分析題干颜凯,得到的信息是:數(shù)組中的元素的范圍是從0到n-1的,這樣說明利用數(shù)組中的元素的數(shù)值作為數(shù)組下標不會出現(xiàn)數(shù)組越界的現(xiàn)象仗扬。并且并不要求找到所有的重復(fù)元素症概,只需要找到任意一個重復(fù)元素即可。那么早芭,可以將數(shù)組中的每一個元素按照其數(shù)值放置到相應(yīng)的下標位置彼城,如果當某個元素出現(xiàn)重復(fù)時,這時該元素的數(shù)值所在的下標位置已經(jīng)有了相同大小的數(shù)值退个,這樣就可以確定重復(fù)的元素募壕。

接下來,將示例推導(dǎo)一遍如下:

  1. [2,3,1,0,2,5]
  2. 將元素2帜乞,放置到數(shù)組下標為2的位置司抱,將其與原始下標元素交換即可,得到[1,3,2,0,2,5]
  3. 將元素3黎烈,與數(shù)組下標為3的位置元素交換习柠,得到[1,0,2,3,2,5]
  4. 同理如下,當遍歷到數(shù)組下標為4時照棋,此時發(fā)現(xiàn)下標2位置的元素與下標4位置的元素數(shù)值相等资溃,說明這個元素重復(fù)
  5. 輸出重復(fù)元素2

實現(xiàn)代碼:

/**
 這里要特別注意~返回任意重復(fù)的一個,賦值duplication[0]
*/
public static boolean duplicate(int numbers[],int length,int [] duplication) {
        //判空處理
        if (length<=1||numbers==null)
            return false;
        for (int i=0;i<length;i++){
            //將值為i的元素不在為位置i上的元素開始交換
            while (numbers[i]!=i){
                //當數(shù)組元素的數(shù)值出現(xiàn)在對應(yīng)的下標位置烈炭,則說明該元素重復(fù)
                if (numbers[i]==numbers[numbers[i]]){
                    duplication[0]=numbers[i];
                    return true;
                }
                swap(numbers,i,numbers[i]);
            }

        }


        return false;

    }
    private static void swap(int[] nums, int a,int b){
        int t=nums[a];
        nums[a]=nums[b];
        nums[b]=t;

    }

題目鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溶锭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子符隙,更是在濱河造成了極大的恐慌趴捅,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霹疫,死亡現(xiàn)場離奇詭異拱绑,居然都是意外死亡,警方通過查閱死者的電腦和手機丽蝎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門猎拨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屠阻,你說我怎么就攤上這事红省。” “怎么了国觉?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵吧恃,是天一觀的道長。 經(jīng)常有香客問我麻诀,道長痕寓,這世上最難降的妖魔是什么缸逃? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮厂抽,結(jié)果婚禮上需频,老公的妹妹穿的比我還像新娘。我一直安慰自己筷凤,他們只是感情好昭殉,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著藐守,像睡著了一般挪丢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卢厂,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天乾蓬,我揣著相機與錄音,去河邊找鬼慎恒。 笑死任内,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的融柬。 我是一名探鬼主播死嗦,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粒氧!你這毒婦竟也來了越除?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤外盯,失蹤者是張志新(化名)和其女友劉穎摘盆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饱苟,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡孩擂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掷空。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋殴。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡囤锉,死狀恐怖坦弟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情官地,我是刑警寧澤酿傍,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站驱入,受9級特大地震影響赤炒,放射性物質(zhì)發(fā)生泄漏氯析。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一莺褒、第九天 我趴在偏房一處隱蔽的房頂上張望掩缓。 院中可真熱鬧,春花似錦遵岩、人聲如沸你辣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舍哄。三九已至,卻和暖如春誊锭,著一層夾襖步出監(jiān)牢的瞬間表悬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工丧靡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蟆沫,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓温治,卻偏偏與公主長得像饥追,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子罐盔,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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