剑指offer--最小的K个数
三种常见解法:
- 首先升序排序,然后取前k的元素;需要注意的是返回结果,否则AC不过
时间复杂度:O(nlogn)public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list = new ArrayList<Integer>(); if(input == null) { return null; } if(k > input.length) return list; quick_sort(input);//快排不贴了,见上一个帖子 for(int i=0;i<k&&i<input.length;i++) { list.add(input[i]); } return list; }
2.利用快排的思想,找到那个partition且满足其左边有k-1个数。不明白为啥这个时间复杂度就是O(n)了,知道的朋友评论区指导下呀
时间复杂度:O(n)
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
//代码明天补
}
3.这个方法不改变原有数组的结构,且适合数组大k小的场景。
常见一个k大小的容器,把数组中的数据一个一个插入容器中。这个不提供代码了。