排序方法及尋找第K個最大元素方法總結

2021-09-02 22:40:16 字數 757 閱讀 8617

leetcode對應題目:

215. kth largest element in an array (medium)

題目描述:找到第 k 大的元素。

解題思路1:sort排序方法

時間複雜度 o(nlogn),空間複雜度 o(1)

public int findkthlargest(int nums, int k)
解題思路2:堆排序,使用優先佇列儲存前k個最大元素

時間複雜度 o(nlogk),空間複雜度 o(k)

public int findkthlargest(int nums, int k) 

return pq.peek();

}

解題思路3:快速排序,選擇乙個元素作為基準來對元素進行分割槽,將小於和大於基準的元素分在基準左邊和右邊的兩個區域。快速選擇並不遞迴訪問雙邊,而是只遞迴進入一邊的元素中繼續尋找,從而降低平均時間複雜度。

時間複雜度 o(n),空間複雜度 o(1)

public int findkthlargest(int nums, int k) 

return nums[k];

}public int partition(int nums,int l,int h)

swap(nums,l,j);

return j;

}public void swap(int nums,int i,int j)

快速尋找第k大元素

我們先思考排序為什麼可以解決該問題 如果我們隨便選定乙個元素,假想的認為它就是我們要找的第k大元素,我們最終要考察,證明的是這個元素在序列降序排序後到底應該處於哪個位置,如果是在第k位,那自然就是第k大元素。說到這裡似乎漏出了點端倪,是啊,我們這樣證明的話並不需要將序列完整的排序,我們只需要將比這個...

陣列的第k個最大元素

提交 總結在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1 輸入 3,2,1,5,6,4 和 k 2 輸出 5 示例 2 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 說明 你可以假設 k 總是有效...

陣列中的第k個最大元素

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1 輸入 3,2,1,5,6,4 和 k 2 輸出 5 示例 2 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 說明 你可以假設 k 總是有效的,且 1...