LeetCode 215 陣列中的第K個最大元素

2021-09-19 14:22:31 字數 984 閱讀 6712

在未排序的陣列中找到第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 ≤ 陣列的長度。

先對這個陣列進行排序(c++可以用演算法包裡的sort()函式進行排序),然後返回倒數第k個元素就行。

class

solution

};

用到優先佇列的方法,將所有的元素插入到優先佇列中(大堆)。然後對優先佇列進行出隊,出k - 1個元素,返回隊首元素。

class

solution

for(

int i =

0; i < k -

1; i++

)return pq.

top();

}};

我們對方法二進行一下改進,我們沒有必要把所有的元素都插入進來,我們先定義乙個(小堆)優先佇列,然後始終保持這個佇列裡有k個元素,然後我們每次只需要判斷隊首元素和下乙個陣列中的元素誰大誰小就行。如果陣列中的元素大於隊首元素,就先讓隊首元素出隊,然後將陣列該元素入隊。遍歷一遍陣列後,返回隊首元素即可。

class

solution

for(size_t j = k; j < nums.

size()

; j++)}

return pq.

top();

}};

LeetCode 215 陣列中的第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...

LeetCode 215 陣列中的第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...