在数组中找到第k大的元素

您在真实的面试中是否遇到过这个题?

Yes
例子

给出数组[9,3,2,4,8]。第三大的元素是4

给出数组 [1,2,3,4,5]。第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推

注意

你能够交换数组中的元素的位置

挑战

要求时间复杂度为O(n),空间复杂度为O(1)

标签 Expand

相关题目 Expand

分析:利用快排的思想。不断partition,

代码:

class Solution {
public:/** param k : description of k* param nums : description of array and index 0 ~ n-1* return: description of return*/int kthLargestElement(int k, vector<int> nums) {// write your code herereturn findKthLargestElement(k,nums,0,nums.size()-1);}int findKthLargestElement(int k,vector<int>& nums,int start,int end){if(start==end)return nums[start];int index = partition(nums,start,end);if(end-index+1==k)return nums[index];else if(end-index+1>k)return findKthLargestElement(k,nums,index+1,end);elsereturn findKthLargestElement(k-(end-index+1),nums,start,index-1);}int partition(vector<int>&nums,int start,int end){int x =  (start+end)/2;swap(nums[start],nums[x]);int i = start+1;int j = i;while(i<=end&&j<=end){if(nums[j]<nums[start]){swap(nums[i],nums[j]);i++;}j++;}swap(nums[start],nums[i-1]);return i-1;}
};

转载于:https://www.cnblogs.com/yangykaifa/p/7007226.html

LintCode-第k大元素相关推荐

  1. LintCode——第K大元素

    第K大元素:在数组num中找到第k大的元素(可以交换数组中的元素的位置) 样例: 数组 [9,3,2,4,8],第三大的元素是 4 数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4 ...

  2. 【算法】快速选择算法 ( 数组中找第 K 大元素 )

    算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...

  3. 堆实战(动态数据流求top k大元素,动态数据流求中位数)

    动态数据集合中求top k大元素 第1大,第2大 ...第k大 k是这群体里最小的所以要建立个小顶堆 只需要维护一个大小为k的小顶堆 即可当来的元素(newCome)> 堆顶元素(smallTo ...

  4. 数据流中的第k大元素的golang实现

    设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...

  5. 常考数据结构与算法:查找第K大元素算法

    题目描述 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 扩展思考:如何处理数组中 ...

  6. DC-leetcode215数组中的第k大元素

    在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 ...

  7. leetcode 703. 数据流中的第K大元素 最小堆解法 c语言

    如题: 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含 ...

  8. 从C语言的角度重构数据结构系列(七)-数据结构堆知识求解数据流中的第K大元素

    前言 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 https://blog.csdn.net/wenyusuran/category_2239261.html ...

  9. 在一个无序的int数组上构建一个最小堆的时间复杂度_漫画:寻找无序数组的第k大元素(修订版)...

    ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...

  10. 数组中的元素赋值给元素_漫画:寻找无序数组的第k大元素

    本期封面作者:泰勒太乐 -----  第二天  ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第 ...

最新文章

  1. 阿联酋的科技野心:AI或将成为新“石油”
  2. 前端趋势榜:上周最有意思、又实用的 10 大 Web 项目 - 210922
  3. 启明云端分享|乐鑫推出在线选型工具 ESP Product Selector
  4. linux系统管理Linux系统实验,实验4-Linux系统管理实验.pdf
  5. scrapy安装_爬虫框架Scrapy简介与安装
  6. c语言位运算符的使用_C语言程序使用位运算符检查给定数字是否为回文
  7. 基于模板的通用代码生成器LKGenerator(一)-发布和主要功能介绍
  8. JavaScript的可变参数介绍
  9. 奇怪,为什么在主页上面只列出最近的随笔,而文章呢?
  10. Java项目的开发流程
  11. CIO40知识星球—3年主管升职IT经理(28-30岁)
  12. nodejs 系统 临时文件夹
  13. java数组初始化的方式_java数组初始化方式
  14. Java虚拟机(JVM源码):编译OpenJDK源码
  15. 4000字干货长文!从校招和社招的角度说说如何准备大厂面试?
  16. 17.继承和派生的基本概念
  17. grpc报错: java.nio.channels.UnresolvedAddressException : null
  18. 04 - 字符和循环分支
  19. Vue使用Stompjs接收Activemq的信息
  20. Java给Word添加目录

热门文章

  1. dokuwiki 的管理和使用
  2. STM32开发 -- WIFI那些事儿(一)
  3. TensorFlow for Hackers (Part VI) - Human Activity Recognition using LSTMs on Android
  4. mysql批量加逗号_批量插入数据到数据库的方式
  5. volte信令流程详解_VOLTE高清语音通话,呼叫时延低于3秒是如何做到的?
  6. mysql 两表管理查询_mysql两表查询
  7. 文件不混淆_Android Studio配置反混淆
  8. themleft模板库_Thymeleaf 模板的使用
  9. 元胞自动机与相关理论和方法
  10. 如果在系统里面无法格式化磁盘可以尝试以下方法