最小的k个数
来源:互联网 发布:苹果mac终端怎么进入 编辑:程序博客网 时间:2024/06/05 18:57
题目:给定一个数组,请找出数组中最小的k个数。
分析:可以使用快速排序算法中的一部分加以改造利用。如果基于数组的第k个数来调整,使得比第k个数字小的所有数字都位于数组的左边,比第k个数大的数字都位于数组的右边。这样调整之后,位于数组中左边的k个数字就是最小的k个数(不一定有序)
代码如下:
import java.util.Set;import java.util.TreeSet;/** * @author Hutongling * * @time:2017年3月24日 上午9:16:19 */public class 最小的k个数 { public static Integer[] leastNum(int[] data,int k){ if(data==null ||k<=0) return null; else{ Integer outPut[]=new Integer[k]; int start=0; int end=data.length-1; int index=partition(data,start,end); while(index!=k-1){ if(index>k-1){ end=index-1; index=partition(data,start,end); } else{ start=index+1; index=partition(data,start,end); } } for(int i=0;i<k;i++){ outPut[i]=data[i]; } return outPut; } } private static int partition(int[] data, int low, int high) { int temp=data[low]; while(low<high){ while(data[high]>=temp && low<high) high--; data[low]=data[high]; while(data[low]<=temp && low<high) low++; data[high]=data[low]; } data[low]=temp; return low; } public static void main(String[] args) { int data[]={4,5,1,6,2,7,3,8,9,18,10,19,12}; for(int i=0;i<leastNum(data,3).length;i++) System.out.print(leastNum(data,3)[i] + " "); }}
结果如下:
1 2 3
0 0
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的K个数
- 最小的k个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- 从零开始,学习web前端之jQuery
- Linux(CentOS)安装jdk三种方法
- 02-线性结构3 Reversing Linked List
- 维基解密揭示了CIA如何侵入您的iPhone和MacBooks
- 服务器上面安装ngnix
- 最小的k个数
- Hadoop国内镜像下载地址:极速
- C4top-N个数求和 (分数求和模拟)
- 输入框只能输入正整数
- 妙用php中的register_shutdown_function和fastcgi_finish_request
- 算法21:实现strstr(str1, str2)
- iOS设置状态栏字体颜色
- 在程序开发中必须了解Activity的四种启动模式
- 解决Unity方向键控制角色行走时,鼠标箭头会一直回到场景的中心点问题