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