劍指offer 第k大元素

2021-08-18 23:30:28 字數 865 閱讀 8242

第k大元素 

給出陣列[9,3,2,4,8],第三大的元素是4

給出陣列[1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此類推

這是一道非常重要的筆試題,思路有三:

1. 最直觀的,就是排下序,取第k大的元素就行了。但是時間複雜度有點高, o(nlgn)

2.利用類似於快速排序中的分治法,每次找到首元素(隨意,這裡設為首元素)應該在的位置,如果找到了第k個位置上的元素,則返回。

3.上述方法的平均時間複雜度是 o(n), 但是必須要修改陣列。 可以選擇乙個資料容器,每次儲存前k小個數,使用小根堆來實現,每次比較乙個新元素,檢視它與小根堆的堆頂大小,如果比堆頂大的話,將堆頂元素poll,然後把這個新元素add進去,最後堆頂元素就是第k大元素了,可用紅黑樹來實現。

**   思路2:

public int kthlargestelement(int k, int nums) 

int pre = 0;

int last = nums.length-1;

int mid = patition(nums, pre, last);

while (mid!=k)

arr[pre] = arr[last];

while (pre** 思路3:

public int top_k(int arr, int k)

});int i = 0;

for(;ipq.peek())

}return pq.peek();

}

第k大元素

在陣列中找到第k大的元素 最先想到的是簡單排序,但是簡單排序超時,於是想到改造快排,快排的思想是每次確定乙個元素在陣列中的下標,如果確定的下標為k那該元素為k大,若下標大於k,第k大在改下標之前.class solution public int pat int nums,int start,int...

第K大元素

在陣列中找到第k大的元素。給出陣列 9,3,2,4,8 第三大的元素是4 給出陣列 1,2,3,4,5 第一大的元素是5,第二大的元素是4,第三大的元素是3,以此類推 要求時間複雜度為o n 空間複雜度為o 1 如果不考慮時間複雜度和空間複雜度,這道題目有很多種方法,利用一種排序演算法將陣列倒敘排序...

5 第k大元素

2017.9.14 昨天做了一整天的題。首先使用了氣泡排序,我知道會超時。但還是做了一遍,心想複習一下舊的知識也是極好的。於是,果然超時了。但是毫不氣餒。想,要不用快速排序試一試。但是自作聰明的以為這題一定是在考堆排序。然而堆排序是我最不會的排序方式,但還是下定決心開始學習。好不容易學會了之後,果然...