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