在未排序的陣列中找到第 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 ≤ 陣列的長度。
//解法1 快排
public
intfindkthlargest
(int
nums,
int k)
class
solution
boolean
isempty()
void
insert
(int e)
intextract()
private
void
shiftup
(int k)
else}}
private
void
shiftdown
(int k)
if(data[j]
>data[k]
)else}}
private
void
swap
(int i,
int j)
}public
intfindkthlargest
(int
nums,
int k)
int ret =0;
for(
int i =
0; i < k; i++
)return ret;
}}
此法時間複雜度為o(n),理論上比前兩種方法都要快,然而實際上執行速度要比前兩種慢很多,不是很懂其中的原理…
//解法3 快排的思想 只需一次遍歷
public
intfindkthlargest3
(int
nums,
int k)
else
if(pos>n-k)
else}}
private
intpartition
(int
nums ,
int l ,
int r)
while
(j>=l+
1&& nums[j]
>=pivot)
if(i>j)
swap
(nums,i,j)
; i++
; j--;}
swap
(nums,l,j)
;return j;
}private
void
swap
(int
nums,
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...
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 k 陣...