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