剑指offer之二十三---最小的K个数
来源:互联网 发布:淘宝关于产品瑕疵说明 编辑:程序博客网 时间:2024/05/16 05:00
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
public static ArrayList<Integer> GetLeastNumbers_Solution(int[] input , int k){/** * 首先拿到这个题的想法是:先排序,然后把前k个数放入list中 */ArrayList<Integer> list = new ArrayList<Integer>();if(input == null || input.length == 0)return list;if(k == 0)return list;if(k > input.length)return list;Arrays.sort(input);for(int i = 0; i < k; i++)list.add(input[i]);return list;}
深入:Arrays.sort()底层采用快排和优化的归并排序,当待排序的数组是基本数据类型时,采用快速排序,当待排序的数组是对象类型时,采用优化的归并排序。因而该排序方法使用了设计模式中的策略模式。
看看牛油的做法:
冒泡排序的思想,只不过最外层循环K次就可以了,也就是说不用全部排序,只挑出符合提议的K个就可以。
链接:https://www.nowcoder.com/questionTerminal/6a296eb82cf844ca8539b57c23e6e9bf来源:牛客网public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> al = new ArrayList<Integer>(); if (k > input.length) { return al; } for (int i = 0; i < k; i++) { for (int j = 0; j < input.length - i - 1; j++) { if (input[j] < input[j + 1]) { int temp = input[j]; input[j] = input[j + 1]; input[j + 1] = temp; } } al.add(input[input.length - i - 1]); } return al; }
/*
*基于堆排序算法,构建最大堆。时间复杂度为O(nlogk)
*如果用快速排序,时间复杂度为O(nlogn);
*如果用冒泡排序,时间复杂度为O(n*k)
*/
阅读全文
0 0
- 剑指offer(二十三)之最小的K个数
- 剑指offer之二十三---最小的K个数
- 剑指offer系列之二十八:最小的k个数
- (二十二)剑指offer之最小的k个数
- 剑指Offer之 - 最小的k个数
- 剑指offer之最小的k个数
- 【剑指offer】之最小的k个数
- 剑指offer之最小的K个数
- 码农小汪-剑指Offer之27 -最小的K个数
- 剑指offer系列之28:最小的k个数
- 剑指offer之面试题30:最小的k个数
- 剑指offer之面试题30最小的k个数
- [剑指offer学习心得]之:最小的k个数
- 剑指Offer之面试题30:最小的K个数
- 剑指offer之最小的K个数(Python)
- 剑指offer:最小的k个数
- 【剑指offer】最小的k个数
- 剑指offer-30:最小的k个数
- 【BZOJ1911】【APIO2010】特别行动队
- Leetcode SQL题
- Linux chmod 命令
- 取石子
- 一致性hash算法
- 剑指offer之二十三---最小的K个数
- JavaScript操作SVG画图库:基于jquery的插件jquery.svgmagic.js
- Javascript面向对象编程(二):构造函数的继承
- python线程
- 走进Spring框架
- 1119. Pre- and Post-order Traversals (30)
- ANDROID样式的开发:SHAPE篇
- 大一菜鸟编写的移动的字母程序
- opencv打开大恒水晶相机教程