vector删除第i个元素_[LeetCode] 215. 数组中的第K个最大元素
题目链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/)
题目描述:
在未排序的数组中找到第 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 ≤ k ≤ 数组的长度。
思路:
排序题
思路一:$nlog(n)$排序
思路二:$nlog(k)$堆排序
- 库函数
- 手写堆排
思路三:平均时间$O(n)$,最差$O(n^2)$部分的快排
快排每次可以固定一个数位置, 只需要判断是否在要找的位置上就可以了!
代码:
思路一:排序
class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:return sorted(nums, reverse = True)[k - 1]
思路二:堆排序
1, 库函数
class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:return heapq.nlargest(k, nums)[-1]
思路二:
2, 手写
class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:def adjust_heap(idx, max_len):left = 2 * idx + 1right = 2 * idx + 2max_loc = idxif left < max_len and nums[max_loc] < nums[left]:max_loc = leftif right < max_len and nums[max_loc] < nums[right]:max_loc = rightif max_loc != idx:nums[idx], nums[max_loc] = nums[max_loc], nums[idx]adjust_heap(max_loc, max_len)# 建堆n = len(nums)for i in range(n // 2 - 1, -1, -1):adjust_heap(i, n)#print(nums)res = Nonefor i in range(1, k + 1):#print(nums)res = nums[0]nums[0], nums[-i] = nums[-i], nums[0]adjust_heap(0, n - i)return res
思路三:快排
class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:def partition(left, right):pivot = nums[left]l = left + 1r = rightwhile l <= r:if nums[l] < pivot and nums[r] > pivot:nums[l], nums[r] = nums[r], nums[l]if nums[l] >= pivot:l += 1if nums[r] <= pivot:r -= 1nums[r], nums[left] = nums[left], nums[r]return rleft = 0right = len(nums) - 1while 1:idx = partition(left, right)if idx == k - 1:return nums[idx]if idx < k - 1:left = idx + 1if idx > k - 1:right = idx - 1
更多题解:
九四干:[LeetCode] 题目汇总(持续更新)zhuanlan.zhihu.com
vector删除第i个元素_[LeetCode] 215. 数组中的第K个最大元素相关推荐
- ⭐算法入门⭐《哈希表》中等05 —— LeetCode 215. 数组中的第K个最大元素
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 给定整数数组nums和 ...
- 力扣(LeetCode)215. 数组中的第K个最大元素(C语言)
一.环境说明 本文是 LeetCode 215题 : 数组中的第K个最大元素,使用c语言实现. 快速选择.查找无序数组的利器! 测试环境:Visual Studio 2019. 二.代码展示 void ...
- LeetCode 215. 数组中的第K个最大元素(快速排序)
1. 题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 ...
- LeetCode 215 数组中的第K个最大元素
题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大 的元素,而不是第 k 个不同的元素. 题解 快速排序 代码 class Solution { pub ...
- leetcode 215.数组中的第K个最大元素
难度:中等 频率:250 ** 题目:给定整数数组nums和整数k,清返回数组中第K个最大的元素. 清注意你要找的是数组排序后的第K个最大的元素,而不是第K个不同的元素. ** ** 题目类型: 经典 ...
- 2022-1-27 Leetcode 215.数组中的第 k 个最大元素
借助 STL class Solution {public:int findKthLargest(vector<int>& nums, int k) {sort(nums.begi ...
- Leetcode 215. 数组中的第K个最大元素 解题思路及C++实现
解题思路: 用最小堆来存储k个最大的值,遍历一次nums容器,然后返回最小堆中最上面节点的值即可. C++中使用priority_queue来实现最小堆.代码如下: class Solution { ...
- 【LeetCode】【HOT】215. 数组中的第K个最大元素(优先队列)
[LeetCode][HOT]215. 数组中的第K个最大元素 文章目录 [LeetCode][HOT]215. 数组中的第K个最大元素 package hot;import java.util.Co ...
- 215. 数组中的第 K个最大元素
215. 数组中的第 K个最大元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数 组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5 ...
最新文章
- 蓝盾第三代AI防火墙分析
- 关于@DQ的留言回复
- Telent 远程登录服务
- 我敢说,这是最全的常用设计模式汇总
- 百度内部培训PPT流出:数据分析的道与术
- 【工作经验分享】java图片转文字
- 面试题:各大公司Java后端开发面试题总结 已看1 背1 有用 链接有必要看看
- 语言怎么得到直流电压并采样_250V10A高频直流电源/大电流直流稳压稳流电源
- Visual C++ 2010 (中文)学习版 安装教程
- vue生命周期的快速记忆方法
- r语言quantmond_R中的关于极值理论的包
- 固定资产取消月末结账时报错,提示:BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录...
- luci编程 openwrt_Luci流程分析(openwrt下)
- 鼠标悬浮移出控制div的显示与隐藏
- URL重写有几种方式
- 睡眠键重启计算机,Windows10进入睡眠模式后按任意键会自动重启怎么办
- 中国GMP级细胞因子市场现状及未来发展趋势
- 详解react生命周期
- ╮(╯▽╰)╭ 数蚂蚁
- 首份成绩单交出却遇重挫,被阿里对狙的贝壳还能“涨”多快?
热门文章
- android 自动登录机制,Android登录记住密码以及自动登录的实现
- python argparse举例说明
- pyqt5实战之简陋的计算器
- 构造函数(constructor)与原型链(prototype)关系
- Android 之 Fagment 完全解析
- poj3934Queue(dp)
- 自定义ClassLoader实现java应用核心逻辑模块热部署
- 【总结】IE6,IE7,IE8,Firefox兼容的css hack 补充!
- [译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表...
- 基于SSM实现公交路线管理系统