【剑指offer】之最小的k个数

来源:互联网 发布:淘宝便宜的店铺 编辑:程序博客网 时间:2024/04/29 13:16

题目描述:

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。


分析:

  


java代码实现:

  

//求出最小的k个值(时间复杂度o(n))private static void getLeastNumbers(int []nums, int k) {int []obs = new int[nums.length]; //这样就不会改变nums里面的值的位置。for(int i=0;i<nums.length;i++) {obs[i] = nums[i];}if(obs.length < 0 || k<=0)return ;int start = 0;int end = obs.length - 1;int index = Partition(obs,start,end);while(index != k-1) {if(index > k-1) {end = index -1;index = Partition(obs,start,end);}else {start = index + 1;index = Partition(obs,start,end);}}//输出索要的k个值for(int i=0;i<k;i++) {System.out.print(obs[i]+",");}}private static int Partition(int []obs, int start ,int end) {int j = 0;if(start < end) {int i = start ;j = end + 1;//int temp = obs[start];while (true) {while (obs[start] > obs[++i] && i < end);while (obs[start] < obs[--j] && j > start);if (i < j) {swap(obs, i, j);} else {break;}}swap(obs,start,j);}return j;}private static void swap(int[] obs, int i, int j) {int swap = obs[i];obs[i] = obs[j];obs[j] = swap;}

0 0
原创粉丝点击