力扣215 陣列中的第K個最大元素

2021-10-23 16:50:59 字數 2308 閱讀 2306

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