算法与数据结构面试题(5)-查找最小的k 个元素
2014-12-11 10:35
351 查看
题目
输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。
理解
1.其实之前看线性查找算法的时候就一直有一个疑问,像这种查找第K个最小数或者K个最小的数,为什么要用线性查找算法这么难以理解的算法,难道随便用一个排序算法后,再遍历获得第K个小的数或者K个最小的数不好么?2.既然这一题没有时间上的要求,那就试试看行不行,用快速排序试试。
快速排序
代码
public class Problem5 {public int[] sort(int[] datas) {
if (datas.length == 0 || datas.length == 1)
return datas;
List<Integer> left = new ArrayList<Integer>();
List<Integer> right = new ArrayList<Integer>();
int pivot = datas[0];
for (int i = 1; i < datas.length; i++) {
if (datas[i] <= pivot) {
left.add(datas[i]);
} else {
right.add(datas[i]);
}
}
int[] sorted = new int[datas.length];
int[] leftArray = new int[left.size()];
for (int i = 0; i < left.size(); i++) {
leftArray[i] = left.get(i);
}
leftArray = sort(leftArray);
int[] rightArray = new int[right.size()];
for (int i = 0; i < right.size(); i++) {
rightArray[i] = right.get(i);
}
rightArray = sort(rightArray);
int index = 0;
for (int i = 0; i < leftArray.length; i++) {
sorted[index++] = leftArray[i];
}
sorted[index++] = pivot;
for (int i = 0; i < rightArray.length; i++) {
sorted[index++] = rightArray[i];
}
return sorted;
}
public static void main(String[] args) {
int[] datas = { 4, 1, 2, 56, 24, 5, 6, 97, 8, 0, 4 };
int[] sorted = new Problem5().sort(datas);
print(sorted, sorted.length);
// 求k个最小的数
int k = 4;
print(sorted, k);
}
public static void print(int[] datas, int length) {
for (int i = 0; i < length; i++) {
System.out.print(datas[i] + " ");
}
System.out.println("");
}
}
输出
0 1 2 4 4 5 6 8 24 56 97
0 1 2 4
相关文章推荐
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- 数据结构面试题1.2.9-查找最小的K个元素-使用最大堆
- 微软等数据结构+算法面试100题(46)-- 查找最小的k 个元素
- 算法习题6:查找最小的k个元素
- 微软,Google面试题 (5) —— 查找最小的k个元素
- 算法与数据结构--在顺序线性表L中查找第1个值与e满足compare()的元素的为序--算法2.5
- 每天一算法(查找最小的k个元素(数组))
- 查找最小的k 个元素之C#算法实现
- 面试题15 - 查找最小的 k 个元素 [数组] / (堆优化 STL O(nlogk) )[STL]
- 程序员面试题精选100题(05)-查找最小的k个元素
- 数据结构练习(04)查找最小的k个元素
- 程序员面试题精选100题(05)-查找最小的k个元素
- 程序员面试题精选100题(05)-查找最小的k个元素
- 【数据结构和算法】 O(1)时间取得栈中的最大 / 最小元素值
- 每天一道算法题4 查找最小的k个元素
- 查找最小的k个元素[算法]
- 微软面试题系列(五):查找最小的 k 个元素
- 程序员面试题100题第05题——查找最小的K个元素
- 算法实验一:二分查找算法改进: 当搜索元素x不存在时,返回小于x的最大元素位置i和大于x的最小元素位置j. 当搜索元素在数组中时,i和j相同,均为x在数组中的位置。