当前位置: 首页 > news >正文

Leetcode 215. 数组中的第K个最大元素 快速排序 / 堆排序

原题链接:Leetcode 215. 数组中的第K个最大元素

在这里插入图片描述
快速排序1——超时:

class Solution {
public:int quicksort(vector<int>& nums,int l,int r,int k){int n=nums.size();int flag = nums[l];int i=l,j=r;while(i<=j){while(i<=j && nums[i]<=flag) i++;while(i<=j && nums[j]>flag) j--;if(i<=j) {swap(nums[i],nums[j]);i++;j--;}}swap(nums[l],nums[j]);if(j<n-k) return quicksort(nums,j+1,r,k);if(j>n-k) return quicksort(nums,l,j-1,k);return nums[j];}int findKthLargest(vector<int>& nums, int k) {int n=nums.size();return quicksort(nums,0,n-1,k);}
};

快速排序2——官解:

class Solution {
public:int quicksort(vector<int>& nums,int l,int r,int k){if(l==r) return nums[k];int flag = nums[l];int i=l-1,j=r+1;while(i<j){do i++; while(nums[i]<flag) ;do j--; while(nums[j]>flag) ;if(i<j) {swap(nums[i],nums[j]);}}if(k<=j) return quicksort(nums,l,j,k);else return quicksort(nums,j+1,r,k);}int findKthLargest(vector<int>& nums, int k) {int n=nums.size();return quicksort(nums,0,n-1,n-k);}
};

快速排序3:
参考 215. 数组中的第 K 个最大元素(分治,清晰图解)

class Solution {
public:int quicksort(vector<int>& nums,int k){int pivot = nums[ rand() % nums.size()];vector<int> big, equal, small;for(auto x: nums){if(x > pivot) big.push_back(x);else if( x < pivot ) small.push_back(x);else equal.push_back(x);}if(k <= big.size()) return quicksort(big,k);if( nums.size() - small.size() < k ) return quicksort(small, k - (nums.size()-small.size()) );return pivot;}int findKthLargest(vector<int>& nums, int k) {return quicksort(nums,k);}
};

堆排序:
建立一个大根堆,做 k−1 次删除操作后堆顶元素就是要找的答案,可用优先队列实现,或者自己实现堆排序:

  1. 优先队列:
class Solution {
public:int findKthLargest(vector<int>& nums, int k) {priority_queue<int> q;for(auto x: nums) q.push(x);while(--k) q.pop();return q.top();}
};
  1. 堆排序

参考:【数据结构】非线性数据结构——堆

class Solution {
public:void heapify(vector<int>& nums,int n,int i){int largeset = i;int left = 2 * i +1;int right = 2 * i +2;if(left<n && nums[left]>nums[largeset]) largeset = left;if(right<n && nums[right]>nums[largeset]) largeset = right;if(largeset!=i){swap(nums[i],nums[largeset]);heapify(nums,n,largeset);}}void heapSort(vector<int>& nums){int n= nums.size();for(int i= n/2-1;i>=0;i--){heapify(nums,n,i);}for(int i = n-1;i>0 ;i--){swap(nums[0],nums[i]);heapify(nums,i,0);}}int findKthLargest(vector<int>& nums, int k) {heapSort(nums);int n = nums.size();return nums[n-k];}
};
http://www.dtcms.com/a/441998.html

相关文章:

  • 网站建设排名奇艺地域邢台建设一个企业网站
  • 电子商务网站建设员网站建设维护文档
  • QT肝8天18--用户角色管理
  • 【开题答辩实录分享】以《基于Python的新能源汽车管理系统的设计与实现》为例进行答辩实录分享
  • springboot+vue智慧旅游管理小程序(源码+文档+调试+基础修改+答疑)
  • [创业之路-683]:“行业的分类”
  • MCI评估量表
  • 探索 Docker/K8s 部署 MySQL 的创新实践与优化技巧——高可用与性能调优进阶
  • Coze源码分析-资源库-编辑知识库-前端源码-核心组件
  • 搜索网站排名mj wordpress
  • 网站容量空间一般要多大做装修效果图的网站
  • MySQL-表的操作
  • C++架构全解析:从设计哲学到实战应用
  • wordpress 多级导航网络营销优化外包
  • 视频生成技术Deepfake
  • 【大语言模型 82】LoRA高级技巧:秩选择与初始化策略
  • 自己做的网站百度搜不到网站的空间是
  • Leetcode 3698. Split Array With Minimum Difference
  • mysql学习--日志查询
  • 北京做网站哪家强网站被k如何恢复
  • Redis的零食盒满了怎么办?详解缓存淘汰策略
  • display mac-address vlan vlan-id 概念及题目
  • 国内十大网站建设广州11个区排名
  • windows远程桌面连接的时候用户名用什么
  • Webpack实战笔记:从自动构建到本地服务器搭建的完整流程
  • SpringBoot + MongoDB全栈实战:从架构原理到AI集成
  • 台山网站建设公司申请云应用wordpress
  • 小迪安全v2023学习笔记(九十五讲)—— 云原生篇Docker安全权限环境检测容器逃逸特权模式危险挂载
  • 从零开始的C++学习生活 1:命名空间,缺省函数,函数重载,引用,内联函数
  • react源码