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

Leetcode : 215. 数组中的第 K 个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

思路:最开始排序算法,弄完之后直接按照要求选择,可惜题目对时间复杂度有要求,只能上快排,但是快排并不是直接满足,还需要在基础上优化。快排采取分治的思想,正常递归需要子串都进行排序,最后合并,但是找出结果有个便利的点就是可以判断在那个串里面,选择性的进行快排来加速。

#include <iostream>
#include <vector>using namespace std;
//选择排序
// class Solution {
// public:
//     int findKthLargest(vector<int>& nums, int k) {
//         for (int i = 0; i < nums.size(); i++){
//             int min_index = i; // 记录最小值的索引
//             for (int j = i; j < nums.size(); j++){
//                 if (nums[j] < nums[min_index]){
//                     min_index = j;
//                 }
//             }
//             swap(nums[min_index], nums[i]);
//         }
//         return nums[nums.size() - k];
//     }
// };class Solution {
public:int aparthSort(vector<int>& nums, int left, int right){int i = left, j = right;int pivot = nums[left];while (i < j) {while (i < j) {if (nums[j] < pivot) {nums[i] = nums[j];i++;break;}else j--;}while (i < j) {if (nums[i] > pivot) {nums[j] = nums[i];j--;break;}elsei++;}}nums[i] = pivot;return i;}int sort (vector<int>& nums, int left, int right, int k) {int mid;if (left < right){mid = aparthSort(nums, left, right);if (mid == nums.size() - k) return nums[mid];else if (mid > nums.size() - k) return sort(nums, left, mid - 1, k);else return sort(nums, mid + 1, right, k);}else    return nums[nums.size() - k];}int findKthLargest(vector<int>& nums, int k) {int res =  sort(nums, 0, nums.size() - 1, k);return res;}
};int main(){Solution s;vector<int> nums = {3,2,1,5,6,4};// vector<int> nums = {1};int k = 4;cout << s.findKthLargest(nums, k) << endl;for (int i = 0; i < nums.size(); i++){cout << nums[i] << " ";}return 0;
}

相关文章:

  • Vue 环境安装以及项目创建
  • HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)
  • 0代码自动化测试:RF 框架实现企业级 UI 自动化测试!
  • 5.WEB渗透测试-前置基础知识-常用的dos命令
  • 一、深度学习介绍
  • vue3 开发记录
  • 【大数据】Flink 内存管理(四):TaskManager 内存分配(实战篇)
  • nginx之重写功能 模块指令 防盗链
  • 猜猜心里数字(个人学习笔记黑马学习)
  • width:100%和width:auto有啥区别
  • MySQL(基础篇)——函数、约束
  • 最新开源!用C++编写的3D gaussian splatting
  • three 模型对象、材质
  • c# 异常处理
  • 音视频数字化(数字与模拟-电视)
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 2017 年终总结 —— 在路上
  • 2017-09-12 前端日报
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android框架之Volley
  • cookie和session
  • Github访问慢解决办法
  • IOS评论框不贴底(ios12新bug)
  • IP路由与转发
  • JavaScript 一些 DOM 的知识点
  • JavaScript实现分页效果
  • MySQL主从复制读写分离及奇怪的问题
  • Promise面试题,控制异步流程
  • Rancher-k8s加速安装文档
  • SpiderData 2019年2月16日 DApp数据排行榜
  • uni-app项目数字滚动
  • Unix命令
  • Vue.js 移动端适配之 vw 解决方案
  • 两列自适应布局方案整理
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端知识点整理(待续)
  • 如何编写一个可升级的智能合约
  • 使用Swoole加速Laravel(正式环境中)
  • 赢得Docker挑战最佳实践
  • 原生 js 实现移动端 Touch 滑动反弹
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 自定义函数
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • # Panda3d 碰撞检测系统介绍
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (十八)SpringBoot之发送QQ邮件
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • *p++,*(p++),*++p,(*p)++区别?
  • .bat批处理(二):%0 %1——给批处理脚本传递参数