LeetCode 215. 数组中的第K个最大元素(快速排序)
1. 题目
在未排序的数组中找到第 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 ≤ 数组的长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 快排解题
- 参考:寻找数组内第K大的元素
- 类似题目:LeetCode 973. 最接近原点的 K 个点(排序/优先队列/快排)
class Solution { //C++
public:int findKthLargest(vector<int>& nums, int k) {k = nums.size()-k;//排序后的位置return findKthL(nums,k,0,nums.size()-1);}
private:void selectMid(vector<int>& nums, int left, int right){int mid = left+((right-left)>>1);if(nums[mid] > nums[right])swap(nums[mid],nums[right]);if(nums[left] > nums[right])swap(nums[left], nums[right]);if(nums[mid] > nums[left])swap(nums[mid], nums[left]);}int findKthL(vector<int>& nums, int &k, int left, int right){selectMid(nums,left,right);//三数取中int p = nums[left];int i = left, j = right;while(i < j){while(i < j && nums[j] > p)j--;swap(nums[i], nums[j]);while(i < j && nums[i] <= p)i++;swap(nums[i], nums[j]);}if(i == k)return nums[i];else if(i < k)return findKthL(nums,k,i+1,right);elsereturn findKthL(nums,k,left,i-1);}
};
class Solution { //C++ ,简化版
public:int findKthLargest(vector<int>& nums, int k) {return findk(nums,0,nums.size()-1, nums.size()-k);}int findk(vector<int>& nums, int l, int r, int k){int p = nums[l];int i = l, j = r;while(i < j){while(i < j && nums[j] > p)j--;while(i < j && nums[i] <= p)i++;swap(nums[i],nums[j]);}swap(nums[i], nums[l]);if(i == k)return nums[i];if(i < k)return findk(nums, i+1, r, k);elsereturn findk(nums, l, i-1, k);}
};
56 ms 9.9 MB
python3 解答
class Solution:# py3def findKthLargest(self, nums: List[int], k: int) -> int:def findk(l, r, k):p = nums[l];i = lj = rwhile i < j:while i < j and nums[j] > p:j -= 1while i < j and nums[i] <= p:i += 1t = nums[i]nums[i] = nums[j]nums[j] = tt = nums[i]nums[i] = nums[l]nums[l] = tif i == k:return nums[i]elif i < k:return findk(i+1, r, k)else:return findk(l, i-1, k)return findk(0,len(nums)-1, len(nums)-k)
1032 ms 19.7 MB
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 ...
- vector删除第i个元素_[LeetCode] 215. 数组中的第K个最大元素
题目链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/) 题目描述: 在未排序的数组中找到第 k 个最大的元素.请 ...
- LeetCode 215 数组中的第K个最大元素
题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大 的元素,而不是第 k 个不同的元素. 题解 快速排序 代码 class Solution { pub ...
- leetcode 215.数组中的第K个最大元素
难度:中等 频率:250 ** 题目:给定整数数组nums和整数k,清返回数组中第K个最大的元素. 清注意你要找的是数组排序后的第K个最大的元素,而不是第K个不同的元素. ** ** 题目类型: 经典 ...
- Leetcode 215. 数组中的第K个最大元素 解题思路及C++实现
解题思路: 用最小堆来存储k个最大的值,遍历一次nums容器,然后返回最小堆中最上面节点的值即可. C++中使用priority_queue来实现最小堆.代码如下: class Solution { ...
- 2022-1-27 Leetcode 215.数组中的第 k 个最大元素
借助 STL class Solution {public:int findKthLargest(vector<int>& nums, int k) {sort(nums.begi ...
- 【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 ...
最新文章
- ASP.NET: 简要分析Table类的使用
- LeetCode【11--盛水最多的容器】LeetCode【12 -- 整数转罗马数字】
- 《中国人工智能学会通讯》——5.4 结 论
- 正则表达式基本语法规范
- JS 中 Date() 的其他操作集锦
- 情况控件Android layout_weight用法图解
- NDK编译mupdf1.1小记
- 趋势杀毒软件无法更新
- 京东T9架构师手把手教你怎么写年薪50万的java简历
- wps 将html转为word,用WPS快速将网页内容转换为WORD文档
- ndwi是什么意思_NDWI是什么意思
- linux aria2 离线,使用aria2做离线下载
- Windows server 2012 主域+辅域
- 供给云saas平台小程序赋能门店增加销售额
- Matlab小实例(一)
- linux下载流量和上传流量,通过linux的tc工具简单实现上传和下载的流量控制
- 2022 GopherChina 想听什么由你做主!
- 韩国仁川机场乐天免税店买买买!
- 追风去,不如造风来——致敬蚂蚁区块链创新大赛中的参与者们
- postman-模拟上传图片
热门文章
- 嵌入式常见笔试题总结(4)
- psql切换schema_PostgreSQL教程(二):模式Schema详解
- 在vue.js引用图片的问题
- 谈谈JDK8中的字符串拼接
- php调用webservice报错Class 'SoapClient' not found
- linux-3.4.2移植到FL2440上(一)--只是基本移植
- [Python] NotImplemented 和 NotImplementedError 区别
- 动态规划 POJ 1088 滑雪
- linux下多线程之pthread_detach(pthread_self())
- VS2008制作安装包