在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
暴力解法
class
solution
:def
findkthlargest
(self, nums, k)
: nums =
sorted
(nums,reverse=
true
)return nums[k-
1]
class
solution
:def
findkthlargest
(self, nums: list[
int]
, k:
int)
->
int:
return nlargest(k,nums)[-
1]
小頂堆
from heapq import
*class
solution
:def
findkthlargest
(self, nums, k)
: re =
for i in
range
(len
(nums)):
if i < k:
)else
:if nums[i]
> re[0]
: heapreplace(re,nums[i]
)return re[
0]
快排:
class
solution
:def
quick_sort
(self,nums,first,last)
:if first < last:
l = first
r = last
base = nums[r]
while l < r:
while l < r and nums[l]
>= base:
l +=
1 nums[r]
= nums[l]
while l < r and nums[r]
<= base:
r -=
1 nums[l]
= nums[r]
nums[r]
= base
self.quick_sort(nums,first,r-1)
self.quick_sort(nums,r+
1,last)
return nums
else
:return
deffindkthlargest
(self, nums, k):if
len(nums)==1
:return nums[k-1]
l =0 r =
len(nums)-1
return self.quick_sort(nums,l,r)
[k-1
]
改進版快排
from random import randint
class
solution
:def
findkthlargest
(self, nums: list[
int]
, k:
int)
->
int:
l =0 r =
len(nums)-1
index = randint(
0,r)
small =
large =
for i in nums[
0:index]
+nums[index+1:
]:if i < nums[index]
:else:if
len(large)
== k-1:
return nums[index]
elif
len(large)
> k -1:
return self.findkthlargest(large,k)
else
:return self.findkthlargest(small,k-
len(large)-1
)
力扣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...
力扣第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 思路1 首先將陣列從大到小排序,再根據k值獲...
力扣c語言實現 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...