題目:
在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
法一:排序後輸出。
法二:優先佇列(堆)。
法三:利用快速排序的方法。
在這裡僅介紹法三,法一法二呼叫庫函式即可。
思路:
首先,找第k個最大的元素,即是找第n-k+1個最小的元素。
步驟一:
我們利用快排的思想,每一次對乙個元素進行歸位,判斷該元素最終位置p與n-k+1位置關係。
步驟二:
1、n-k+1>p:則對p右側元素進行步驟一操作。
2、n-k+1public
intfindkthlargest
(int
nums,
int k)
helper
(nums,
0,nums.length-
1,nums.length-k)
;return nums[nums.length-k];}
public
void
helper
(int
nums,
int lo,
int hi,
int k)
while
(j-1
>=
0&&nums[
--j]
>v);if
(i>=j)
int temp = nums[i]
; nums[i]
= nums[j]
; nums[j]
= temp;
}int temp = nums[j]
; nums[j]
= v;
nums[lo]
= temp;
if(j>k)
else
if(j}
陣列中的第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...
陣列中的第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...