Leetcode 75. Sort Colors

題目

Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
Note:
You are not suppose to use the library's sort function for this problem.

Follow up:
A rather straight forward solution is a two-pass algorithm using counting sort.First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed by 2's.
Could you come up with an one-pass algorithm using only constant space?

分析

給定一組0,1,2的亂序票彪,要求先列0晰筛,在列出1,之后列出2亿乳∥茄酰可以使用統(tǒng)計(jì)的方法算出依次有多少個僚匆,然后輸出即可憋飞。題目提示可以有一遍遍歷即可實(shí)現(xiàn)的方法他炊。于是可以設(shè)想有兩個指針争剿,p指向前面0和1的間隙,q指向與1和2的間隙痊末。遍歷過程中發(fā)現(xiàn)0和2后就向前后指針位置分別交換蚕苇,同時更新指針的位置,直到遍歷后i==q凿叠。這樣所有的0都在p指針之前涩笤,所有的2都在q指針之后,那么1就在中間盒件,于是排序完畢蹬碧。無多余內(nèi)存空間使用。

void sortColors(int* nums, int numsSize) {
    int p=0,q=numsSize-1;
    for(int i=0;i<numsSize&&i<=q;i++)
    {
        if(nums[i]==0)
        {
            if(p!=i)
            {
                int temp=nums[i];
                nums[i]=nums[p];
                nums[p]=temp;
            }
            p++;
            
        }
        else if(nums[i]==2)
        {
            int temp=nums[i];
            nums[i]=nums[q];
            nums[q]=temp;
            q--;
            i--;
        }
        //printf("%d %d\n",p,q);
        //for(int j=0;j<numsSize;j++)
        //    printf("%d ",nums[j]);
        //printf("\n");
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炒刁,一起剝皮案震驚了整個濱河市恩沽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翔始,老刑警劉巖罗心,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異城瞎,居然都是意外死亡渤闷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門脖镀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飒箭,“玉大人,你說我怎么就攤上這事认然〔购叮” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵卷员,是天一觀的道長盈匾。 經(jīng)常有香客問我,道長毕骡,這世上最難降的妖魔是什么削饵? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任岩瘦,我火速辦了婚禮,結(jié)果婚禮上窿撬,老公的妹妹穿的比我還像新娘启昧。我一直安慰自己,他們只是感情好劈伴,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布密末。 她就那樣靜靜地躺著,像睡著了一般跛璧。 火紅的嫁衣襯著肌膚如雪严里。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天追城,我揣著相機(jī)與錄音刹碾,去河邊找鬼。 笑死座柱,一個胖子當(dāng)著我的面吹牛迷帜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播色洞,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼戏锹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了火诸?” 一聲冷哼從身側(cè)響起景用,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惭蹂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體割粮,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盾碗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舀瓢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廷雅。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖京髓,靈堂內(nèi)的尸體忽然破棺而出航缀,到底是詐尸還是另有隱情,我是刑警寧澤堰怨,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布芥玉,位于F島的核電站,受9級特大地震影響备图,放射性物質(zhì)發(fā)生泄漏灿巧。R本人自食惡果不足惜赶袄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抠藕。 院中可真熱鬧饿肺,春花似錦、人聲如沸盾似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽零院。三九已至溉跃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間门粪,已是汗流浹背喊积。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玄妈,地道東北人乾吻。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像拟蜻,于是被迫代替她去往敵國和親绎签。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

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