• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Addicom

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

LeetCode215. 数组中的第K个最大元素

中等题215. 数组中的第K个最大元素

  • 题目:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
  • 示例:输入: [3,2,1,5,6,4] 和 k = 2 输出: 5

使用快速排序实现时间复杂度为O(n),空间复杂度为O(logn)的算法:

 1 class Solution:
 2     def findKthLargest(self, nums: List[int], k: int) -> int:
 3 
 4         def partPos( arr , left , right ):
 5             #初始化最右端为比较数
 6             pivot = arr[right]
 7             i = left
 8             for j in range(left,right+1):
 9                 #将所有arr[j]<=pivot的数字与arr[i]交换,i+1
10                 if arr[j]<=pivot:
11                     arr[i],arr[j] = arr[j],arr[i]
12                     i += 1
13             #返回当前pivot位置i-1,此时i-1左右被pivot分开
14             return i-1
15 
16         def quickSort( arr , left , right , distance ):
17             #一次快排,返回中间位置
18             pos = partPos( arr , left , right )
19             #当前位置距离right==distance立即返回,否则递归查找
20             if right-pos+1 == distance:
21                 return arr[pos]
22             elif right-pos+1 < distance:
23                 return quickSort( arr , left , pos-1 , distance-(right-pos+1) )
24             elif right-pos+1 > distance:
25                 return quickSort( arr , pos+1 , right , distance )
26         
27         return quickSort( nums , 0 , len(nums)-1 , k )

 

posted on 2021-10-22 11:42  Addicom  阅读(34)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3