本文介绍 LeetCode 题集中,有关排序的问题。

215. Kth Largest Element in an Array(数组中的第K个最大元素)

问题描述

思路与代码

解决本题时,笔者想到了一种比较取巧的方法,即寻找数组的最大值,将其修改为数值下限,如此循环 k-1 次,然后输出第 k 次的最大值即可。

代码如下:

class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:min_num = -10 ** 5for _ in range(k - 1):index = nums.index(max(nums))nums[index] = min_num  # change the max number for k - 1 times, then return the maxreturn max(nums)

然而该方法运行效率并不高,但是很节约内存空间:

于是想到另一种方法,即参考快速排序的思路来解决。

代码如下:

class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:# quicksort partition functiondef partition(start: int, end: int) -> int:pivot = nums[end]  # use end as pivotwhile start < end:while start < end and nums[start] >= pivot:start += 1nums[end] = nums[start]while start < end and nums[end] <= pivot:end -= 1nums[start] = nums[end]nums[end] = pivotreturn enddef quick_select(start: int, end: int, k_: int):if start == end:return nums[start]index = partition(start=start, end=end)n = index - start + 1# cases: compare k and nif n == k_:return nums[index]elif n > k_:return quick_select(start=start, end=index - 1, k_=k_)else:return quick_select(start=index + 1, end=end, k_=k_ - n)return quick_select(start=0, end=len(nums) - 1, k_=k)

该代码的实际运行效果也差强人意,而且比较消耗空间:

查看了一些比较高效的答案,大致有两类:

  • 使用内置函数排序,然后选第 k 个值,老实讲,这种方法更为取巧,失去了自己编写代码实现的意义,个人认为没有参考价值
  • 同样是快速排序的思路,但是笔者暂时没有发现和本文第二种方法在代码实现层面的差别,感觉思路上是没问题的,于是暂时搁置问题吧,如有新发现再做更新,并且随时欢迎交流

LeetCode 题集:排序相关推荐

  1. LeetCode题集大全

    LeetCode 01. 两数之和 LeetCode 02.两数相加 LeetCode 03. 无重复字符的最长子串 LeetCode 07. 整数反转 Leetcode 08. 字符串转换整数 (a ...

  2. LeetCode 题集:字典树

    本文介绍 LeetCode 题集中,有关字典树的问题. 208. Implement Trie (Prefix Tree)(实现 Trie (前缀树)) 问题描述 思路与代码 本题是基本的字典树问题, ...

  3. 【山无遮,海无拦】LeetCode题集 线性枚举之最值算法

    目录 1464.数组中两元素的最大乘积 法一:线性扫描 法二:排序 485. 最大连续 1 的个数 法一:线性扫描 153. 寻找旋转排序数组中的最小值 法一:线性扫描 法二:二分法 154. 寻找旋 ...

  4. LeetCode题集 —— 调整数组顺序使奇数位于偶数前面 + 移动零

    目录 题目:分离奇偶数 解法一:菜鸟级 解法二:头尾指针 解法三:快慢指针 再次优化解法三: 举一反三:解题:移动零 解法一:快慢指针 解法二: 题目:分离奇偶数 输入一个整数数组,实现一个函数来调整 ...

  5. leetcode题库:4.两个排序数组的中位数

    题目: /**   *leetcode题库:4. 求两个排序数组的中位数  *  *  给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 .  *  请找出这两个有序数组的中位数. ...

  6. LeetCode第969题 煎饼排序

    LeetCode第969题 煎饼排序 题目 给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序. 一次煎饼翻转的执行过程如下: 选择一个整数 k ,1 <= k <= arr. ...

  7. Lubuladong算法小抄思考和题集

    0.引言 本文主要针对Labuladong算法小抄中设计的LeetCode提集进行整理,并给出相关题目解法.小编欢迎大佬指出其中问题,可随时通过邮件联系小编:xiakexiaohu#163.com. ...

  8. 2020-07算法刷题集

    2020-07算法刷题集 前言 0715-一年中的第几天 0716-分数加减运算 0717-移动石子直到连续 0719-拼写单词 0720-有效的回旋镖 0722-最后一块石头的重量 0723-有效三 ...

  9. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

最新文章

  1. Linux/服务器常用操作
  2. Jmeter Web 性能测试入门 (六):Jmeter 解析 response 并传递 value
  3. 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...
  4. JCG学院开设了Java设计模式课程!
  5. python网站框架下载_web.py首页、文档和下载 - Python框架 - OSCHINA - 中文开源技术交流社区...
  6. 如何使用Docker部署Go Web应用
  7. 易到负责人喊话:没钱!易到用车深陷欠薪危机 司机围堵总部讨说法无果
  8. 物联网形势大好,传感器前景可观
  9. debian8.7 下配置fai机环境
  10. bailian.openjudge 2746:约瑟夫问题
  11. java发送qq邮箱验证_java代码发送邮箱验证码与qq邮箱smtp服务
  12. PCB高速信号布线技巧
  13. 丘成桐数学竞赛2016
  14. python有哪些模块安全方向_Python 常用模块
  15. Daimayuan Online Judge 快快变大
  16. Linux知识点求职应聘必备
  17. Detected memory leaks!内存泄漏,溢出,内存越界问题分析
  18. 洛阳计算机学校排名2015,洛阳初中名校排行榜TOP10,这一次你说了算!
  19. 视频会议常用术语——转自华为TE40帮助文档
  20. el-table动态添加行,列。自定义输入表头,input hover 显示文字

热门文章

  1. 数值分析-Legendre正交多项式 实现函数逼近
  2. R语言如何构建正交多项式回归?
  3. OGRE3D 渲染系统线程化
  4. 虹科带你今天来聊聊,什么是EMC测试?
  5. 当页面加载的时候,未加载出来的图片显示默认图片
  6. iOS系统H264视频硬件编解码说明
  7. 史上最全的Staking上车指南
  8. 2023 届校招薪资爆料汇总
  9. yara规则分享:Rekoobe病毒
  10. 2022 年 CKA 考题 2022.06.31 刚过