1、描述
在未排序的陣列中找到第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
2、演算法
1)、排序
思想:先對陣列進行排序,再返回倒數第 k 個元素
func findkthlargest(_ nums : [int], _ k : int)->int
2)快速選擇
思想:隨機選擇乙個樞軸。
使用劃分演算法將樞軸放在陣列中的合適位置 pos。將小於樞軸的元素移到左邊,大於等於樞軸的元素移到右邊。
比較 pos 和 n - k 以決定在哪邊繼續遞迴處理。
時間複雜度:o(nlogn)。
func findkthlargest(_ nums : [int], _ k : int)->int
private func partition(_ nums : inout [int], _ left : int, _ right : int, _ pivot_index : int)->int
}//將基準移到最後
nums.swapat(store_index, right)
return store_index
}private func quickselect(_ nums : [int], _ left : int, _ right : int, _ k_smallest :int)->int
//選擇乙個隨機的基準下標
var pivot_index = left+int.randomintnumber(range(0...(right-left)))
pivot_index = partition(&nums, left, right, pivot_index)
//如果第k個最大值等於基準下標
if k_smallest == pivot_index else if k_smallest < pivot_indexelse
}
資料結構與演算法 陣列中的第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 ...
Leetcode215陣列中第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...
陣列中的第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...