问题描述

求无序数组int[] nums中第K大的元素。

例如

输入:nums[] = {9,5,8},k = 2

输出:8

输入:nums[] = {3,1,2,4,5,5,6},k = 4

输出:4

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array

问题分析

利用快速排序的思想,每次将数据分成左右2组,以及一个基准数flag。左侧数据比flag大,右侧数据比flag小。此时,比较k和flag的下标, flag的下标记作flagSwap,如果k-1=flagSwap(为什么是k-1?因为第1大的数,对应的数组下标是0),若相等,则flag就是要找的数;若k-1<flagSwap,则在左侧那一组中继续寻找;若k-1>flagSwap,则在右侧那一组中继续寻找。

代码实现

class Solution {public int findKthLargest(int[] nums, int k) {return fastSort(nums, 0, nums.length - 1, k);
}private int fastSort(int[] nums, int start, int end, int k) { /*以flag为基准,利用快速排序的思想,将数据分成左右2组 左侧数据比flag大,右侧比flag小*/
System.out.println("start= " + start + ", end= " + end + ", k= " + k);int flag = nums[end];int i = start, j = end;for (; i < j; ) {while (i < j && nums[i] >= flag) {
i++;
}if (i < j) {
nums[j] = nums[i];
j--;
}while (i < j && nums[j] <= flag) {
j--;
}if (i < j) {
nums[i] = nums[j];
i++;
}
}
nums[j] = flag;/*这里要注意的是,flagSwap=j-start,因为start既可能 从0开始,也可能从大于0开始,用j减去start才等于flag在数组 中的相对位置 */int flagSwap = j - start;
StringBuilder sb = new StringBuilder();int m = 0;while (m < nums.length) {
sb.append(nums[m] + " ");
m++;
}
System.out.println("nums: " + sb.toString() + "---->flagSwap= " + flagSwap);if (flagSwap < k - 1) {return fastSort(nums, j + 1, end, k - flagSwap - 1);
} else if (flagSwap > k - 1) {return fastSort(nums, start, j - 1, k);
} else {return nums[j];
}
}
}

运行结果

怎么修改数组中指定元素_求数组中第K大的元素相关推荐

  1. python提取txt中指定内容_提取视频中的音频——python三行程序搞定!

    写在开头   身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很小的python包,然后执行三行程序!    ...

  2. python提取txt中指定内容_提取视频中的音频,Python三行程序搞定!

    来源:http://suo.im/5yOtbx 写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很 ...

  3. matlab中stract用法_求matlab中strcat用法

    MATLAB概述 MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言 ...

  4. 算法--排序--寻找数组内第K大的元素

    此题目,需要用到快速排序里的划分数组操作: 快排参考:https://blog.csdn.net/qq_21201267/article/details/81516569#t2 先选取一个合适的哨兵( ...

  5. python第k序列元素查找_【python】寻找数组中第k大的元素

    题目链接:https://www.nowcoder.com/question/next?pid=13956292&qid=298692&tid=26431616 方法一: 最简单直接的 ...

  6. 寻找数组中第k大的元素

    这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. (1)最简单直接的方法:先排序再找 最简单直接的想法是首先进行排序.假设元素的数量不大,比如才几千个,那就可 ...

  7. 经典算法题:寻找数组中第k大的元素

    这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. 扩展思考:如何处理数组中的重复元素?比如,对于数组a={1,2,2,2,3,3,3},第二大的元素应该是3还 ...

  8. 求序列中第k大的元素(划分树模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=4251 n个数,求给定区间中间大小的元素的值 Sample Input 5 5 3 2 4 1 3 1 3 2 4 ...

  9. 查找两个已经排好序的数组的第k大的元素

    http://www.cnblogs.com/buptLizer/archive/2012/03/31/2427579.html 给出两个排好序的数组 ,不妨设为a,b都按升序排列,及k的值,求出第k ...

最新文章

  1. 连接远程服务器CredSSP加密Oracle修正报错解决办法
  2. python读取txt文件并写入excel-Python读excel生成数据存入txt文件
  3. The Road to SDN: An Intellectual History of Programmable Networks
  4. FXK Javascript
  5. Java基础(五)继承和多态
  6. centos7 开机后进去了命令行_Linux系统管理:开机启动流程(二)
  7. Python工程笔记(1):轨迹与日志
  8. 读芯术python教程答案_攻略Python的免费书单:走进编程,从这五本书开始
  9. java rf14bug_hadoop2.7.0集群,使用中遇到的bug及解决办法
  10. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(9) - 64位整型指令(MMX指令集扩展)
  11. Pentium 4处理器架构/微架构/流水线 (2) - SSE2
  12. 主进程退出后子进程还会存在吗?_进程和线程面试常见的19个问题
  13. 计算机桌面怎么分区域,怎样设置电脑桌面的区域分割?
  14. 生产排程系统_APS(高级计划排产)系统该如何选型,主要从哪些方面考虑?
  15. 做抖音自媒体,如何搭建自己的账号?
  16. Window10 ie自带浏览器下载乱码
  17. 软件中存在的技术风险
  18. 同步电机仿真永磁同步电机 弱磁控制 simulink仿真模型 凸极电机
  19. 批处理判断文件夹是否为空
  20. Matlab一元二次方程求根

热门文章

  1. Java面试必问!mysql分页查询
  2. 学习Pytorch官方Demo——Lenet,以及遇到的问题
  3. 《Effective.Java》 阅码草堂笔记 一
  4. 记麒麟V10 +飞腾1500A 安装kvm失败全过程
  5. iphonexs订阅显示无法连接服务器,iPhone XS/XS Max 无法连接到 App Store 怎么解决?
  6. 《Risk》杂志公布风险管理技术最新排名-2005
  7. 西门子/Siemens工业自动化系统SIMATIC控制器和SIMATIC ET 200 IO系统(PLC,HMI)
  8. 移动互联网下的服务转型――10086APP成长的探索
  9. OO CSS(面向对象 CSS)
  10. 春节7日高赞视频的背后,是怎样的节日流量收割秘籍?