1.​​题目​​

2. 思想

手写快排,然后得到第k个最大元素

3. 代码

class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
self.quickSort(nums,0,len(nums)-1) # 排序
# print(nums)
return nums[-k]

def quickSort(self,nums,left,right):
if left >= right: # 递归边界
return
mid = self.partition(nums,left,right)
self.quickSort(nums,left,mid-1) # 左半部分快排
self.quickSort(nums,mid+1,right) # 右半部分快排

# 将区间分成左右两部分(对每个部分进行快排)
def partition(self,nums,left,right):
pivot = nums[left]
pre_left = left
while(left < right):
while(left < right and nums[right] >= pivot):
right -= 1
nums[left] = nums[right]

while(left < right and nums[left] <= pivot):
left += 1
nums[right] = nums[left]

nums[left] = pivot
# 返回pivot的坐标
# print(nums)
return right

最后为了避免被特殊数据坑,我们可以在取pivot值的时候,稍微做一个变换。

mid = (left+right)//2
# 交换两个未知的值
nums[mid],nums[left] = nums[left],nums[mid]
pivot = nums[left]