问题描述

求无序数组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. c#读写XML文件 (转)
  2. redis 3.0 集群__数据迁移和伸缩容
  3. Markdown公式输入(very nice!!!)
  4. 在Spring中嵌入HSQLDB服务器实例
  5. 恶意软件伪装“正规军”,撕开Booster Cleaner“画皮”下的真相
  6. Java讲课笔记14:final关键字
  7. 如何在IDM官网安装IDM谷歌插件?
  8. Maccms8.x 命令执行漏洞分析
  9. 标签thead与th的区别
  10. 【SDOI2015】寻宝游戏
  11. 彪悍的人生不需要解释,需要解释的人生是软弱的
  12. 30分钟了解PAC学习理论——计算学习理论第一讲
  13. 深入探索Android卡顿优化(下)
  14. Milliman和Akur8结成战略联盟,为财产和意外伤害保险公司、管理型总代理和初创企业提供下一代定价能力
  15. Error syncing pod, skipping: failed to “StartContainer“ for “POD“ with ErrImagePull: “image pull fai
  16. HDU 5804/BC 86A Price List
  17. Windows10笔记本 闲置一段时间后黑屏无法唤醒,风扇全速运转的解决日志
  18. 【Go】Go Ubuntu 安装 gvm:Go 版本管理工具
  19. 【重磅】2022年通信行业白皮书汇总下载
  20. 怎样用matlab做复数运算,MATLAB面向复数运算的设计.doc

热门文章

  1. [Excel知识技能] 秒懂Excel三种引用
  2. 【工业物联网】如何假装很懂工业物联网?
  3. 用js制作游戏:扫雷,源代码
  4. 逼独立显卡下岗 测英特尔“核芯显卡”
  5. php cms多城市版,[转载]齐博CMS多城市版改为单城市版以及设置伪静态规则
  6. 数据挖掘-Task4:建模与调参
  7. 2021京津冀交通协同发展大会盛大召开!
  8. Treat in China
  9. php防刷红包,PHP防止刷微信红包方法
  10. Spring Boot集成Redis实现缓存