Leetcode-283-移動(dòng)零

給定一個(gè)數(shù)組 nums,編寫一個(gè)函數(shù)將所有 0 移動(dòng)到它的末尾棋枕,同時(shí)保持非零元素的相對(duì)順序。

例如万矾, 定義 nums = [0, 1, 0, 3, 12]伤疙,調(diào)用函數(shù)之后银酗,nums 應(yīng)為 [1, 3, 12, 0, 0]辆影。

注意事項(xiàng):

必須在原數(shù)組上操作,不要為一個(gè)新數(shù)組分配額外空間黍特。
盡量減少操作總數(shù)蛙讥。


分析:

題目不難理解,把非0元素向前移動(dòng)灭衷,把0向后移動(dòng)次慢。最后讓數(shù)組的前段都是原順序的非零元素,數(shù)組后段都是0即可翔曲。題目要求不能創(chuàng)建新數(shù)組迫像,那么需要想辦法在原數(shù)組上下功夫。

下面給出兩種解法:

解法一:

仔細(xì)分析題意部默,可以遍歷數(shù)組侵蒙,如果遇到0,那么和右邊的第一個(gè)非零元素進(jìn)行交換傅蹂,然后再判斷下一個(gè)元素是否為0纷闺。類似于冒泡的行為。這種方法注重移動(dòng)元素的過程份蝴,時(shí)間復(fù)雜度高犁功,速度慢!
Java解答如下:

    public void moveZeroes(int[] nums) {
        if (nums == null || nums.length == 0 || nums.length == 1) {
            return;
        }
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {
                j = i + 1;
                while (j < nums.length) {
                    if (nums[j] != 0) {
                        nums[i] = nums[i] ^ nums[j];
                        nums[j] = nums[i] ^ nums[j];
                        nums[i] = nums[i] ^ nums[j];
                        break;
                    }
                    j += 1;
                }
            }
        }
    }

解法二:

仔細(xì)觀察運(yùn)行之后的結(jié)果婚夫,我們可以發(fā)現(xiàn)浸卦,不需要管中間移動(dòng)的過程,只關(guān)注最終的結(jié)果即可案糙。只要把數(shù)組中所有的非零元素限嫌,按順序給數(shù)組的前段元素位賦值,剩下的全部直接賦值0时捌,一切都OK了怒医。這種方法時(shí)最快的!

Java解答如下:

    public void moveZeroes(int[] nums) {
        if (nums == null || nums.length == 0 || nums.length == 1) {
            return;
        }
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                nums[index] = nums[i];
                index += 1;
            }
        }
        for (int i = index; i < nums.length; i++) {
            nums[i] = 0;
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奢讨,一起剝皮案震驚了整個(gè)濱河市稚叹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拿诸,老刑警劉巖扒袖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亩码,居然都是意外死亡季率,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蟀伸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚀同,“玉大人缅刽,你說我怎么就攤上這事〈缆纾” “怎么了衰猛?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刹孔。 經(jīng)常有香客問我啡省,道長,這世上最難降的妖魔是什么髓霞? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任卦睹,我火速辦了婚禮,結(jié)果婚禮上方库,老公的妹妹穿的比我還像新娘结序。我一直安慰自己,他們只是感情好纵潦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布徐鹤。 她就那樣靜靜地躺著,像睡著了一般邀层。 火紅的嫁衣襯著肌膚如雪返敬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天寥院,我揣著相機(jī)與錄音劲赠,去河邊找鬼。 笑死秸谢,一個(gè)胖子當(dāng)著我的面吹牛凛澎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播估蹄,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼预厌,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了元媚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤苗沧,失蹤者是張志新(化名)和其女友劉穎刊棕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體待逞,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甥角,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了识樱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗤无。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡震束,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出当犯,到底是詐尸還是另有隱情垢村,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布嚎卫,位于F島的核電站嘉栓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拓诸。R本人自食惡果不足惜侵佃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奠支。 院中可真熱鬧馋辈,春花似錦、人聲如沸倍谜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枢劝。三九已至井联,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間您旁,已是汗流浹背烙常。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹤盒,地道東北人蚕脏。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像侦锯,于是被迫代替她去往敵國和親驼鞭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • 給定一個(gè)數(shù)組 nums, 編寫一個(gè)函數(shù)將所有 0 移動(dòng)到它的末尾尺碰,同時(shí)保持非零元素的相對(duì)順序挣棕。 例如, 定義 nu...
    拉面小魚丸閱讀 182評(píng)論 0 0
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)亲桥。 張土汪:刷leetcod...
    土汪閱讀 12,748評(píng)論 0 33
  • 本文內(nèi)容為練習(xí)LeetCode題目時(shí)的解題思路和不同算法的記錄洛心,實(shí)現(xiàn)語言為C++,代碼保存在Github题篷,均已在L...
    SK木眠閱讀 1,007評(píng)論 0 0
  • 轉(zhuǎn)載自:https://egoistk.github.io/2016/09/10/Java%E6%8E%92%E5...
    chad_it閱讀 988評(píng)論 0 18
  • 學(xué)員都想學(xué)車的時(shí)候價(jià)格能便宜一點(diǎn)损敷,所以某些教練就看準(zhǔn)了學(xué)員想占便宜這個(gè)弱點(diǎn),用低價(jià)吸引學(xué)員報(bào)名深啤。這個(gè)低價(jià)不是正常的...
    美的駕校_金梁閱讀 640評(píng)論 3 0