Leetcode 215 Kth Largest Element in an Array - java 算法實(shí)現(xiàn)

原題:

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.

解題:

看到題目第一反應(yīng)是采用堆排序,但是題目中只要求返回第k大的數(shù)殖侵,比K大的數(shù)的順序不用管,因此悴务,想到采用快速選擇的方式。
快速選擇與快速排序思想相同疆栏,重點(diǎn)是分治殊霞。

思路:

1、遍歷:選取target侧甫,將比target大的元素放置在其右邊,比target小的元素放置到其左邊蹋宦。
2披粟、target的位置 === k 返回
3、target> k 說(shuō)明 說(shuō)明第k大數(shù)在target的左邊
4冷冗、target< k 說(shuō)明第k大數(shù)在target右邊

代碼:
class Solution {
    public int findKthLargest(int[] nums, int k) {
        return findKthLargest2(nums, k ,0, nums.length - 1);
    }
    public int findKthLargest2(int[] nums, int k, int start ,int end) {
        int flag = nums[start];
        int left = start;
        int right = end;
        while(left < right){
            while(left < right && nums[right] <= flag){
                right --;
            }
            nums[left] = nums[right];
            while (left < right && nums[left] >= flag){
                left ++;
            }
            nums[right] = nums[left];
        }
        nums[right] = flag;
        if(left == k ){
            return nums[left];
        }
        else if(left > k){
            return findKthLargest2(nums, k, start, left - 1);
        }
        else {
            return findKthLargest2(nums, k - left - 1, left + 1, end);
        }
    }
}
注意:

臨界點(diǎn)的選擇守屉。

總結(jié):

雖然快速選擇的關(guān)鍵思想是分治,但是蒿辙,在解答過(guò)程中拇泛,干擾我比較長(zhǎng)時(shí)間的是左右兩個(gè)指針挖坑、填坑的過(guò)程思灌。
快速排序的挖坑俺叭、填坑的過(guò)程如下:
定義兩個(gè)指針指向數(shù)組的前后兩端,并選取target泰偿,將target所在位置定義為第一個(gè)坑位熄守;如果從右邊開始的數(shù)據(jù)元素小于target,該元素進(jìn)入坑位,從而形成新的坑位裕照;接著從左邊開始遍歷攒发,如果左側(cè)元素大于target,那么該元素進(jìn)入上一次形成的坑位晋南,進(jìn)而產(chǎn)生更新的坑位晨继,以此規(guī)律遍歷,直到左右兩指針相遇搬俊。最后,target元素進(jìn)入最后產(chǎn)生的坑位中蜒茄;以此結(jié)束了選擇唉擂,保證了target左邊的元素都是比target小的 ,而右邊元素都是比target大的檀葛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玩祟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子屿聋,更是在濱河造成了極大的恐慌空扎,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件润讥,死亡現(xiàn)場(chǎng)離奇詭異转锈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)楚殿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門撮慨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人脆粥,你說(shuō)我怎么就攤上這事砌溺。” “怎么了变隔?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵规伐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我匣缘,道長(zhǎng)猖闪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任孵户,我火速辦了婚禮萧朝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夏哭。我一直安慰自己检柬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著何址,像睡著了一般里逆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上用爪,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天原押,我揣著相機(jī)與錄音,去河邊找鬼偎血。 笑死诸衔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颇玷。 我是一名探鬼主播笨农,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帖渠!你這毒婦竟也來(lái)了谒亦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤空郊,失蹤者是張志新(化名)和其女友劉穎份招,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狞甚,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锁摔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了入愧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鄙漏。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖棺蛛,靈堂內(nèi)的尸體忽然破棺而出怔蚌,到底是詐尸還是另有隱情,我是刑警寧澤旁赊,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布桦踊,位于F島的核電站,受9級(jí)特大地震影響终畅,放射性物質(zhì)發(fā)生泄漏籍胯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一离福、第九天 我趴在偏房一處隱蔽的房頂上張望杖狼。 院中可真熱鬧,春花似錦妖爷、人聲如沸蝶涩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绿聘。三九已至嗽上,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熄攘,已是汗流浹背兽愤。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挪圾,地道東北人浅萧。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哲思,于是被迫代替她去往敵國(guó)和親惯殊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359