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...