在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1:
輸入: [3,2,1,5,6,4] 和 k = 2示例 2:輸出: 5
輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4說明:輸出: 4
你可以假設 k 總是有效的,且 1 ≤ k ≤ 陣列的長度。解法一:時間o(nlogn),空間o(1)
public
class
solution
}
解法二:快排
class
solution
else
if(index>target)
else
if(indexprivate
intpartition
(int
nums,
int i,
int j)
if(i=nums[j]
;while
(i=nums[i])if
(i=nums[i];}
nums[i]
=key;
return i;
}}
解法三:大根堆 時間o(nlogn)
堆
class
solution
return nums[0]
;}private
void
buildmaxheap
(int
nums,
int heaplength)
}private
void
maxheapify
(int i,
int[
] nums,
int heaplength)
else
if(r>nums[largest])if
(i!=largest)
}private
void
swap
(int
nums,
int i,
int largest)
}
解法四:優先佇列
優先佇列是用堆來實現的
compare()返回值:
(a, b) -> a - b 公升序
(a, b) -> b - a 降序
public
class
solution
for(
int i =
0; i < len - k; i++
)return minheap.
peek()
;}}
陣列中的第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 個不同的元素。法一 排序後輸出。法二 優先佇列 堆 法三 利用快速排序的方法。在這裡僅介紹法三,法一法二呼叫庫函式即可。思路 首先,找第k個最大的元素,即是找第n 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...