怎么修改数组中指定元素_求数组中第K大的元素
![](/assets/blank.gif)
问题描述
求无序数组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];
}
}
}
![](/assets/blank.gif)
怎么修改数组中指定元素_求数组中第K大的元素相关推荐
- python提取txt中指定内容_提取视频中的音频——python三行程序搞定!
写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很小的python包,然后执行三行程序! ...
- python提取txt中指定内容_提取视频中的音频,Python三行程序搞定!
来源:http://suo.im/5yOtbx 写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很 ...
- matlab中stract用法_求matlab中strcat用法
MATLAB概述 MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言 ...
- 算法--排序--寻找数组内第K大的元素
此题目,需要用到快速排序里的划分数组操作: 快排参考:https://blog.csdn.net/qq_21201267/article/details/81516569#t2 先选取一个合适的哨兵( ...
- python第k序列元素查找_【python】寻找数组中第k大的元素
题目链接:https://www.nowcoder.com/question/next?pid=13956292&qid=298692&tid=26431616 方法一: 最简单直接的 ...
- 寻找数组中第k大的元素
这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. (1)最简单直接的方法:先排序再找 最简单直接的想法是首先进行排序.假设元素的数量不大,比如才几千个,那就可 ...
- 经典算法题:寻找数组中第k大的元素
这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. 扩展思考:如何处理数组中的重复元素?比如,对于数组a={1,2,2,2,3,3,3},第二大的元素应该是3还 ...
- 求序列中第k大的元素(划分树模板)
http://acm.hdu.edu.cn/showproblem.php?pid=4251 n个数,求给定区间中间大小的元素的值 Sample Input 5 5 3 2 4 1 3 1 3 2 4 ...
- 查找两个已经排好序的数组的第k大的元素
http://www.cnblogs.com/buptLizer/archive/2012/03/31/2427579.html 给出两个排好序的数组 ,不妨设为a,b都按升序排列,及k的值,求出第k ...
最新文章
- 连接远程服务器CredSSP加密Oracle修正报错解决办法
- python读取txt文件并写入excel-Python读excel生成数据存入txt文件
- The Road to SDN: An Intellectual History of Programmable Networks
- FXK Javascript
- Java基础(五)继承和多态
- centos7 开机后进去了命令行_Linux系统管理:开机启动流程(二)
- Python工程笔记(1):轨迹与日志
- 读芯术python教程答案_攻略Python的免费书单:走进编程,从这五本书开始
- java rf14bug_hadoop2.7.0集群,使用中遇到的bug及解决办法
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(9) - 64位整型指令(MMX指令集扩展)
- Pentium 4处理器架构/微架构/流水线 (2) - SSE2
- 主进程退出后子进程还会存在吗?_进程和线程面试常见的19个问题
- 计算机桌面怎么分区域,怎样设置电脑桌面的区域分割?
- 生产排程系统_APS(高级计划排产)系统该如何选型,主要从哪些方面考虑?
- 做抖音自媒体,如何搭建自己的账号?
- Window10 ie自带浏览器下载乱码
- 软件中存在的技术风险
- 同步电机仿真永磁同步电机 弱磁控制 simulink仿真模型 凸极电机
- 批处理判断文件夹是否为空
- Matlab一元二次方程求根
热门文章
- Java面试必问!mysql分页查询
- 学习Pytorch官方Demo——Lenet,以及遇到的问题
- 《Effective.Java》 阅码草堂笔记 一
- 记麒麟V10 +飞腾1500A 安装kvm失败全过程
- iphonexs订阅显示无法连接服务器,iPhone XS/XS Max 无法连接到 App Store 怎么解决?
- 《Risk》杂志公布风险管理技术最新排名-2005
- 西门子/Siemens工业自动化系统SIMATIC控制器和SIMATIC ET 200 IO系统(PLC,HMI)
- 移动互联网下的服务转型――10086APP成长的探索
- OO CSS(面向对象 CSS)
- 春节7日高赞视频的背后,是怎样的节日流量收割秘籍?