这个题拿到之后首先会想到排序,排好序之后在选取选取最大的K个数。排序选择快速排序是个比较好的选择。

好了,让我们来进行第一个解法:快速排序

代码如下

复制代码代码如下:

public static void quickSort(int[] arr, int start, int end) {

if (start < end) {

int key = arr[start];

int right = start;

int left = end;

while (right < left) {

while (right < left && arr[left] > key) {

left --;

}

if (right < left) {

arr[right] = arr[left];

}

while (right < left && arr[right] <= key) {

right ++;

}

if (right < left) {

arr[left] = arr[right];

}

}

arr[right] = key;

quickSort(arr, start, right-1);

quickSort(arr, left+1, end);

}

}

快速排序之后,数组会是有序的,上面的排序是从小到大的,所以我们输出应该是下面这样

复制代码代码如下:

int k = 4;

for (int i=arr.length-1; i>=arr.length-k; i--) {

System.out.println(arr[i]+"  ");

}

。第一个解法已经好了,但是有没有更好的办法。

答案是有的!我们可以选择部分排序,接下来我们使用选择排序来做解决这个问题。

代码如下:

复制代码代码如下:

public static int[] selectSortK(int[] arr, int k) {

if(arr == null || arr.length == 0) {

return null;

}

int[] newArr = new int[k];

List list = new ArrayList();//记录每次最大数的下标

for (int i=0; i

int maxValue = Integer.MIN_VALUE; //最大值

int maxIndex = i;

for (int j=0; j

if (arr[j] > maxValue && !list.contains(j) ) {

maxValue = arr[j];

maxIndex = j;

}

}

if (!list.contains(maxIndex)) {//如果不存在,就加入

list.add(maxIndex);

newArr[i] = maxValue;

}

}

return newArr;

}

java第k大的数字,JAVA中寻找最大的K个数解法相关推荐

  1. java查找第k大的数字_[经典算法题]寻找数组中第K大的数的方法总结

    今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...

  2. 算法设计--查找无序数组中第K大的数字

    给出一个数组,要求查找出这个数组中按顺序排第K大的数字. 思路:利用快速排序的思想,把数组中的元素分治,并计算中间值的位置,如果是K,则这个数就是第K大的数字,如果比K小,那么再次利用快速排序分治中值 ...

  3. 第k大的数python代码_Python实现查找数组中任意第k大的数字算法示例

    本文实例讲述了Python实现查找数组中任意第k大的数字算法.分享给大家供大家参考,具体如下: 模仿partion方法,当high=low小于k的时候,在后半部分搜索,当high=low大于k的时候, ...

  4. 【算法】在N个乱序数字中查找第K大的数字

    目录 1. 结论 2. 经典的几种解法 2.1 解法一:O(n*k) 2.2 解法二:O(n*logk) 2.3 解法三:O(n) 2.4 解法四:O(n*logn+k) 2.5 解法五:O(n*lo ...

  5. JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA)

    JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA) 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合.. 当 n = 4 ...

  6. 915. 分割数组、剑指 Offer II 076. 数组中的第 k 大的数字

    LeetCode题解 1.分割数组 2.数组中的第 k 大的数字 1.分割数组 题目描述: ➡️挑战链接⬅️ 分析: 首先题目叙述的很简单: 要求呢 1.左右两个区间元素必须连续 2.左右区间必须都有 ...

  7. 在N个数中查找第K大的数字(Top K问题)

    在N个乱序数字中查找第k大的数字,时间复杂度可以减小至 O(N*logN) O(N) O(1) O(2) 答案:B 所谓"第(前)k大数问题"指的是在长度为n(n>=k)的乱 ...

  8. 在N个乱序数字中查找第k大的数字

    在N个乱序数字中查找第k大的数字 在N个乱序数字中查找第k大的数字,时间复杂度可以减小至 O(N*logN) O(N) O(1) O(2) 答案:B 所谓"第(前)k大数问题"指的 ...

  9. 给定随机数列求第k大的数字

    原来STL我还是有很多不知道的地方 STL 采用的算法是: 当数组长度 <= 3时, 采用插入排序. 当长度 > 3时, 采用快排 Partition 的思想,也就是说类似快速排序(这里不 ...

最新文章

  1. Citrix XenServer XenCenter 警报
  2. 大数据WEB阶段Mybatis(一)
  3. CSS中margin和padding的区别
  4. ios设计登录功能_亲爱的产品设计师,这是iOS 14的新功能
  5. 操作系统中的全局页面置换算法
  6. 《Android音视频开发》— Android 书籍
  7. python求圆周率马青公式_计算圆周率的马青公式
  8. 2019辽宁公务员考试:申论突破80+学习计划第二步
  9. PMP|项目经理如何做好相关方管理?
  10. zookeeper介绍及使用
  11. Android 第三方QQ分享功能实现
  12. 网易宝系统架构之我见:高可用篇
  13. 移动端微信里打开H5页面,页面字体放大
  14. 程序员与公务员之争,到底选啥?
  15. ruby 数组自定义排序_在Ruby中对数组排序
  16. gridControl自动增加行添加数据
  17. 三十八、移动IP和网络层设备
  18. 数据收集-数据收集软件-数据收集工具免费
  19. python判断sqlite数据库是否存在_sqlite3 判断数据库是否存在
  20. icp许可证申请办理时限以及适用范围

热门文章

  1. 如何挂载另一个lvm硬盘
  2. JavaScript知识精简
  3. JSOUP 打开url的方式
  4. 节点对象图与DOM树形图
  5. iOS 利用JSPatch 添加热补丁功能
  6. Nginx禁止通过IP,未绑定域名访问服务器
  7. Nginx配置文件nginx.conf中文详解
  8. 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!
  9. 0X000000该内存不能read的解决方法
  10. c#中的interface abstract 与 virtual(转)