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

2021-10-17 05:07:32 字數 1929 閱讀 2808

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

十大排序演算法可參考:十大排序演算法—這一篇遠遠不夠

topk問題可參考:top k問題的兩種解決思路

大頂堆

class

solution

public

static

intselecttopk

(int

arr,

int k)

// 對於選擇前k個最大的數,則遍歷k個迴圈就可以將大頂堆的元素換到陣列的最後乙個位置

for(

int i =

0; i < k; i++

)return arr[arr.length - k];}

/* * @description: 構建乙個大頂堆

* @author: yuanbaoqiang

* @date: 2021/1/22 下午1:28

* @param: arr

* @return: void

*/public

static

void

buildmaxheap

(int arr)

}/** @description: 調整大頂堆

* @author: yuanbaoqiang

* @date: 2021/1/22 下午7:45

* @param: arr

* @param: root

* @param: len

* @return: void

*/public

static

void

adjustmaxheap

(int

arr,

int root,

int len)

if(right < len && arr[right]

> arr[root]

)// 小頂堆

/*if(left < len && arr[left] < arr[root])

if(right < len && arr[right] < arr[root])*/

if(root != initialvalue)

}public

static

voidex(

int[

] arr,

int i,

int j)

}

quick sort

class

solution

public

static

intquickselect

(int

arr,

int left,

int right,

int k)

public

static

intpartition

(int

arr,

int left,

int right)

ex(arr, left, i)

;return i;

}public

static

voidex(

int[

] arr,

int i,

int j)

}

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