Lintcode31 Partition Array solution題解

【題目描述】

Given an array nums of integers and an int k, partition the array (i.e move the elements in "nums") such that:All elements < k are moved to the left;All elements >= k are moved to the right;Return the partitioning index, i.e the first index i nums[i] >= k.

Notice:You should do really partition in array nums instead of just counting the numbers of integers smaller than k.If all elements in nums are smaller than k, then return nums.length

給出一個整數(shù)數(shù)組 nums 和一個整數(shù) k厂榛。劃分數(shù)組(即移動數(shù)組 nums 中的元素)瞻颂,使得:所有小于k的元素移到左邊;所有大于等于k的元素移到右邊;返回數(shù)組劃分的位置聪轿,即數(shù)組中第一個位置 i消略,滿足 nums[i] 大于等于 k。

注意:你應該真正的劃分數(shù)組 nums线召,而不僅僅只是計算比 k 小的整數(shù)數(shù)岁疼,如果數(shù)組 nums 中的所有元素都比 k 小尉共,則返回 nums.length侥加。

【題目鏈接】

http://www.lintcode.com/en/problem/partition-array/

【題目解析】

容易想到的一個辦法是自左向右遍歷捧存,使用right保存大于等于 k 的索引,i則為當前遍歷元素的索引担败,總是保持i >= right, 那么最后返回的right即為所求昔穴。

自左向右遍歷,遇到小于 k 的元素時即和right索引處元素交換氢架,并自增right指向下一個元素傻咖,這樣就能保證right之前的元素一定小于 k. 注意if判斷條件中i >= right不能是i > right, 否則需要對特殊情況如全小于 k 時的考慮朋魔,而且即使考慮了這一特殊情況也可能存在其他 bug. 具體是什么 bug 呢岖研?歡迎提出你的分析意見~

有了解過 Quick Sort 的做這道題自然是分分鐘的事,使用左右兩根指針 left,right 分別代表小于警检、大于等于 k 的索引孙援,左右同時開工,直至 left>right.

大循環(huán)能正常進行的條件為 left<=right, 對于左邊索引扇雕,向右搜索直到找到小于 k 的索引為止拓售;對于右邊索引,則向左搜索直到找到大于等于 k 的索引為止镶奉。注意在使用while循環(huán)時務必進行越界檢查础淤!

找到不滿足條件的索引時即交換其值,并遞增left, 遞減right. 緊接著進行下一次循環(huán)哨苛。最后返回left即可鸽凶,當nums為空時包含在left = 0之中,不必單獨特殊考慮建峭,所以應返回left而不是right.

【參考答案】

http://www.jiuzhang.com/solutions/partition-array/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玻侥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子亿蒸,更是在濱河造成了極大的恐慌凑兰,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件边锁,死亡現(xiàn)場離奇詭異姑食,居然都是意外死亡,警方通過查閱死者的電腦和手機茅坛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門矢门,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事祟剔「舳悖” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵物延,是天一觀的道長宣旱。 經(jīng)常有香客問我,道長叛薯,這世上最難降的妖魔是什么浑吟? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮耗溜,結(jié)果婚禮上组力,老公的妹妹穿的比我還像新娘。我一直安慰自己抖拴,他們只是感情好燎字,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阿宅,像睡著了一般候衍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洒放,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天蛉鹿,我揣著相機與錄音,去河邊找鬼往湿。 笑死妖异,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的领追。 我是一名探鬼主播他膳,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔓腐!你這毒婦竟也來了矩乐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤回论,失蹤者是張志新(化名)和其女友劉穎散罕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傀蓉,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡欧漱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了葬燎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片误甚。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡缚甩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窑邦,到底是詐尸還是另有隱情擅威,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布冈钦,位于F島的核電站郊丛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瞧筛。R本人自食惡果不足惜厉熟,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望较幌。 院中可真熱鬧揍瑟,春花似錦、人聲如沸乍炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恩急。三九已至杉畜,卻和暖如春纪蜒,著一層夾襖步出監(jiān)牢的瞬間衷恭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工纯续, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留随珠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓猬错,卻偏偏與公主長得像窗看,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子倦炒,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗显沈。 張土汪:刷leetcod...
    土汪閱讀 12,747評論 0 33
  • 1. Two Sum 用hash可以得到O(n)時間的解法,用python中的enumerate函數(shù)逢唤,可以獲得元素...
    Morphiaaa閱讀 436評論 0 0
  • 目錄 了解了名詞短語的三個組成部分拉讯,再來看作為一個整體的名詞短語需要注意的問題。 一鳖藕、名詞短語的省略 名詞短語的三...
    清心瀾意閱讀 2,233評論 0 6
  • 今天看了一篇很好玩的文章魔慷,跟大家分享一下。 1著恩、有8個球院尔,其中1個比另外的要略重蜻展。在不用砝碼的前提下,你最少要稱幾...
    iOS_aFei閱讀 868評論 0 4
  • 我想念的 不是太陽 而是你的微笑 我想念的 不是土地 而是你的腳印 我想念的 不是星星 而是你的安好 我想念的 不...
    甜宋兒閱讀 239評論 10 3