【剑指offer】之最小的k个数
2015-12-11 13:57
260 查看
题目描述:
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
分析:
java代码实现:
题目描述:
输入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; }
相关文章推荐
- CSS 的优先级机制[总结]
- 反应器(Reactor)模式
- html表格边框的设置
- bootstrap在 刷新页面,tab选择页面不会改变。
- Opening Default document on IIS (HTML With WebAPI)
- Angular2组件开发—模板语法(五)
- animate.css简介
- css 步骤条
- CSS3魔法堂:认识@font-face和Font Icon
- 反应器(Reactor)模式
- JSON使用TypeNameHandling序列化与反序列化.NET类型和声明类型
- Cmder+Sublime Text“基友”实验
- JS替换非正则替换
- 网易前端微专业,JavaScript程序设计基础篇:函数
- ReactNative 开发入门教程
- jsp表单的客户端验证
- CSS检测的高像素密度屏幕设备
- json_encode 数值类型转换
- JS初学的一些易错的知识点
- jsp编写猜数字游戏