LeetCode.922-按奇偶排序數(shù)組 II(Sort Array By Parity II)

這是悅樂書的第354次更新耳峦,第379篇原創(chuàng)

01 看題和準(zhǔn)備

今天介紹的是LeetCode算法題中Easy級別的第216題(順位題號是922)。給定非負(fù)整數(shù)的數(shù)組A焕毫,A中的一半整數(shù)是奇數(shù)蹲坷,而剩下的一半是偶數(shù)。

對數(shù)組進(jìn)行排序邑飒,以便每當(dāng)A[i]為奇數(shù)時冠句,i就是奇數(shù); A[i]是偶數(shù),i就是偶數(shù)幸乒。
你可以返回滿足此條件的任何答案數(shù)組。例如:

輸入:[4,2,5,7]
產(chǎn)出:[4,5,2,7]
說明:[4,7,2,5]唇牧,[2,5,4,7]罕扎,[2,7,4,5]也將被接受。

注意

  • 2 <= A.length <= 20000

  • A.length%2 == 0

  • 0 <= A [i] <= 1000

02 第一種解法

使用兩個List將奇數(shù)丐重、偶數(shù)分別存起來腔召,創(chuàng)建一個新的數(shù)組result,如果索引為奇數(shù)扮惦,就從存奇數(shù)的List中取值作為新數(shù)組的元素臀蛛,反之就從存偶數(shù)的List中取值作為新數(shù)組的元素。

此解法的時間復(fù)雜度是O(N)崖蜜,空間復(fù)雜度是O(N)浊仆。

public int[] sortArrayByParityII(int[] A) {
    List<Integer> odd = new ArrayList<Integer>();
    List<Integer> even = new ArrayList<Integer>();
    for (int num : A) {
        if (num%2 == 0) {
            even.add(num);
        } else {
            odd.add(num);
        }
    }
    int j = 0, k = 0;
    int[] result = new int[A.length];
    for (int i=0; i<result.length; i++) {
        if (i%2 == 0) {
            result[i] = even.get(j++);
        } else {
            result[i] = odd.get(k++);
        }
    }
    return result;
}


03 第二種解法

我們也可以直接從A中取值,同樣是新建一個result數(shù)組豫领,對result數(shù)組新建兩個索引抡柿,一個從0開始,只做偶數(shù)索引等恐,另一個從1開始洲劣,只做奇數(shù)索引,分兩次遍歷A數(shù)組课蔬,將對應(yīng)的元素和索引值存入result中囱稽。

此解法的時間復(fù)雜度是O(N),空間復(fù)雜度是O(N)二跋。

public int[] sortArrayByParityII2(int[] A) {
    int[] result = new int[A.length];
    int j = 0;
    for (int i=0; i<A.length; i++) {
        if (A[i]%2 == 0) {
            result[j] = A[i];
            j += 2;
        }
    }
    int k = 1;
    for (int i=0; i<A.length; i++) {
        if (A[i]%2 != 0) {
            result[k] = A[i];
            k += 2;
        }
    }
    return result;
}


04 第三種解法

針對上面的第二種解法战惊,我們也可以只使用一次循環(huán)。

此解法的時間復(fù)雜度是O(N)同欠,空間復(fù)雜度是O(N)样傍。

public int[] sortArrayByParityII3(int[] A) {
    int[] result = new int[A.length];
    int j = 0, k = 1;
    for (int i=0; i<A.length; i++) {
        if (A[i]%2 == 0) {
            result[j] = A[i];
            j += 2;
        } else {
            result[k] = A[i];
            k += 2;
        }
    }
    return result;
}


05 第四種解法

雙指針横缔。

定義兩個指針i和j,i代表偶數(shù)索引衫哥,從0開始茎刚;j代表奇數(shù)索引,從n-1開始(n為數(shù)組A的length)撤逢,如果偶數(shù)索引位置對應(yīng)的元素為奇數(shù)膛锭,且奇數(shù)索引位置對應(yīng)的元素為偶數(shù)索抓,就進(jìn)行元素交換失驶。如果偶數(shù)索引位置對應(yīng)的元素為偶數(shù)掠手,偶數(shù)索引i就加2伟墙,同理荆几,奇數(shù)索引位置對應(yīng)的元素為奇數(shù)粗井,奇數(shù)索引j就減2唧取,循環(huán)結(jié)束條件為i不小于n或者j小于1航夺。

此解法的時間復(fù)雜度是O(N)媳叨,空間復(fù)雜度是O(1)腥光。

public int[] sortArrayByParityII4(int[] A) {
    int i = 0, j = A.length-1, n = A.length;
    while (i < n && j >= 1) {
        if (A[i]%2 == 1 && A[j]%2 == 0) {
            int tem = A[j];
            A[j] = A[i];
            A[i] = tem;
        }
        if (A[i]%2 == 0) {
            i += 2;
        }
        if (A[j]%2 == 1) {
            j -= 2;
        }
    }
    return A;
}


06 小結(jié)

算法專題目前已連續(xù)日更超過六個月,算法題文章222+篇糊秆,公眾號對話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】武福、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞痘番,獲取系列文章合集捉片。

以上就是全部內(nèi)容,如果大家有什么好的解法思路汞舱、建議或者其他問題伍纫,可以下方留言交流,點(diǎn)贊兵拢、留言翻斟、轉(zhuǎn)發(fā)就是對我最大的回報和支持!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末说铃,一起剝皮案震驚了整個濱河市访惜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腻扇,老刑警劉巖债热,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異幼苛,居然都是意外死亡窒篱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墙杯,“玉大人配并,你說我怎么就攤上這事「吒洌” “怎么了溉旋?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嫉髓。 經(jīng)常有香客問我观腊,道長,這世上最難降的妖魔是什么算行? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任梧油,我火速辦了婚禮,結(jié)果婚禮上州邢,老公的妹妹穿的比我還像新娘儡陨。我一直安慰自己,他們只是感情好量淌,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布迄委。 她就那樣靜靜地躺著,像睡著了一般类少。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渔扎,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天硫狞,我揣著相機(jī)與錄音,去河邊找鬼晃痴。 笑死残吩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倘核。 我是一名探鬼主播泣侮,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼紧唱!你這毒婦竟也來了活尊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漏益,失蹤者是張志新(化名)和其女友劉穎蛹锰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绰疤,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铜犬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癣猾。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡敛劝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纷宇,到底是詐尸還是另有隱情夸盟,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布呐粘,位于F島的核電站满俗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏作岖。R本人自食惡果不足惜唆垃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痘儡。 院中可真熱鬧辕万,春花似錦、人聲如沸沉删。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾瑰。三九已至砖茸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間殴穴,已是汗流浹背凉夯。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留采幌,地道東北人劲够。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像休傍,于是被迫代替她去往敵國和親征绎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

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