题目描述
输入n个整数,找出其中最小的K个数。
输入示例
例如输入4,5,1,6,2,7,3,8这8个数字,k=4
输出实例
则最小的4个数字是1,2,3,4。
方法一
思路如下:
找出当前k个元素中最大值的索引值,剩余n-k中的值一次与当前list中最大值作比较,如果小于最大值,则将当前值替换最大值索引处的值,依次循环,最后list中前k个元素为最小值。
java代码如下:
package ordoffer;
import java.util.ArrayList;
public class Solution {
public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(input.length < k || k == 0)
return list;
for (int i = 0; i < k; i++)
list.add(input[i]);
for (int i = k; i < input.length; i++) {
int j = getMax(list);
int temp = (Integer) list.get(j);
//元素覆盖 将小于该元素的值替换掉当前list中的最大值
if (input[i] < temp){
list.set(j, input[i]);
}
}
return list;
}
//获取当前list中最大值的index索引
public static int getMax(ArrayList<Integer> list) {
int max = list.get(0);
int j = 0;
for (int i = 1; i < list.size(); i++) {
if (list.get(i) > max) {
max = list.get(i);
j = i;
}
}
return j;
}
public static void main(String[] args) {
int k=4;
int []a={70,82,22,42,32,10,6,9,1};
// int []a={7,8,2};
ArrayList<Integer> list=GetLeastNumbers_Solution(a,k);
System.out.println(list);
}
}
方法二
思路如下:
建立一个list,其大小为k,用于存放最小的k个元素值。使用循环将n个整数中最小的值采用冒泡排序放入元素末尾,最后依次将元素末尾的k个元素放入list中,即为所求结果。
java代码如下:
package ordoffer;
import java.util.ArrayList;
public class SolutionA {
public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> al = new ArrayList<Integer>();
if (k > input.length) {
return al;
}
//循环k次 list中添加k个元素
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;
}
}
//将最小的元素值添加list中去
al.add(input[input.length - i - 1]);
}
return al;
}
public static void main(String[] args) {
int k=4;
int []a={7,2,4,6,9,1};
// int []a={7,8,2};
ArrayList<Integer> list=GetLeastNumbers_Solution(a,k);
System.out.println(list);
}
}
方法三
思路如下:
建立一个list,通过Array.sort方法对数组中的元素进行排序,将前k个元素加入到list中去。
package ordoffer;
import java.util.ArrayList;
import java.util.Arrays;
public class SolutionB {
public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res = new ArrayList<>();
if (input == null || input.length == 0){
return res;
}
if (k > input.length) {
return res;
}
Arrays.sort(input);
for (int i = 0; i < k; i++) {
res.add(input[i]);
}
return res;
}
public static void main(String[] args) {
int k=4;
int []a={7,2,4,6,9,1};
// int []a={7,8,2};
ArrayList<Integer> list=GetLeastNumbers_Solution(a,k);
System.out.println(list);
}
}