【LEETCODE】模擬面試-215. Kth Largest Element in an Array

圖:新生大學

https://leetcode.com/problems/kth-largest-element-in-an-array/

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.
**Note: **You may assume k is always valid, 1 ≤ k ≤ array's length.

**input: **an unsorted array, an integer k
output: return an integer, which is the kth largest in the given array, including duplicates
corner: when the array is null, or its length is less than k, there is no such element

The primitive idea is to sort the array, and count the kth element, if we use merge sort, it will take O(n logn), plus O(k) to count.

Or we can optimize that we just sort the largest k elements, ignoring the remain n-k elements. It will raise the Heap structure, since it's fast to find the largest element.

So, we scan from left to right in the array, first put k elements into a heap to heapify. Time is O(k)
This heap is a minHeap where its top is the smallest.
Every time we scan an element in the array, we compare it with the top of the heap.
If it's smaller than or equal to top, we keep moving on.
If it's larger than top, we pop the top, and put it in the top, and main the heap to be a minHeap. Time is O(logk)
After we scanned all the elements in the array, we just need to pop the top, which is the right largest one. Need to compare n - k times.

Finally, time complexity is O((n - k)logk + k)
space is O(k)

public class Solution {
    public int findKthLargest(int[] nums, int k){
    if ( nums == null || nums.length < k ){
        return Integer.MIN_VALUE;
    }
    
    //method: maintain a min heap with size k
    PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(k, new MyComparator());
    
    //1.add first k elements
    for ( int i = 0; i < k; i++ ){
        minHeap.offer(nums[i]);
    }
    
    //2.compare remain elements, add
    for ( int i = k; i < nums.length; i++ ){
        if ( nums[i] > minHeap.peek() ){
            minHeap.poll();
            minHeap.offer(nums[i]);
        }
    }
    
    return minHeap.poll();
    
}

class MyComparator implements Comparator<Integer>{
    @Override
    public int compare(Integer o1, Integer o2){
        if ( o1.equals(o2) ){
            return 0;
        }else{
            //from small to large, minHeap
            return o1 - o2;
        }
    }
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市者祖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屈张,老刑警劉巖温鸽,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹂风,死亡現(xiàn)場離奇詭異客冈,居然都是意外死亡告嘲,警方通過查閱死者的電腦和手機丑勤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門华嘹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人法竞,你說我怎么就攤上這事耙厚。” “怎么了岔霸?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵薛躬,是天一觀的道長。 經(jīng)常有香客問我呆细,道長型宝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任絮爷,我火速辦了婚禮趴酣,結果婚禮上,老公的妹妹穿的比我還像新娘坑夯。我一直安慰自己岖寞,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布柜蜈。 她就那樣靜靜地躺著仗谆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淑履。 梳的紋絲不亂的頭發(fā)上隶垮,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音秘噪,去河邊找鬼狸吞。 笑死,一個胖子當著我的面吹牛缆娃,可吹牛的內(nèi)容都是我干的捷绒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼贯要,長吁一口氣:“原來是場噩夢啊……” “哼暖侨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起崇渗,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤字逗,失蹤者是張志新(化名)和其女友劉穎京郑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葫掉,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡些举,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俭厚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片户魏。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挪挤,靈堂內(nèi)的尸體忽然破棺而出叼丑,到底是詐尸還是另有隱情,我是刑警寧澤扛门,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布鸠信,位于F島的核電站,受9級特大地震影響论寨,放射性物質(zhì)發(fā)生泄漏星立。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一葬凳、第九天 我趴在偏房一處隱蔽的房頂上張望绰垂。 院中可真熱鬧,春花似錦沮明、人聲如沸辕坝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琳袄,卻和暖如春江场,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窖逗。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工址否, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碎紊。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓佑附,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仗考。 傳聞我的和親對象是個殘疾皇子音同,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,306評論 0 10
  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,429評論 0 23
  • 1,從這篇文章中秃嗜,我學到的最重要的概念人要有自己個人的立場权均,堅持自己的立場顿膨,絕不退讓父母是孩子的榜樣,做好榜樣很重...
    朕的小哆啦閱讀 254評論 3 0
  • 早上臨時安排有變化叽赊,照顧孩子吃飯的時間不得不提前離開恋沃。因為公公在樓下催促,只好匆忙離開必指。被人催促的時候我特別著急囊咏,...
    記與憶閱讀 212評論 0 0
  • 一1一 晚上一邊刷微博匆笤,一邊聽音樂。手機收藏的歌單谱邪,每一首順序播放炮捧。 終于放到了盧冠廷的《一生所愛》。 “過去惦银,現(xiàn)...
    印大鈔閱讀 429評論 2 0