swift演算法 陣列中的第k個最大元素

2021-09-25 11:18:10 字數 1146 閱讀 4338

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