最小的k个数
1:题目描述
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例 1:
输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]
示例 2:
输入:arr = [0,1,2,1], k = 1
输出:[0]
限制:
0 <= k <= arr.length <= 10000
0 <= arr[i] <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2:题目分析
我们通过排序后,选择后K个原始即可解决问题,这是个最直接方法代码如下:
3:代码示例
package JianZhiOffer40; import java.util.*; /** * @author :dazhu * @date :Created in 2020/3/26 11:18 * @description:剑指offer40 * @modified By: * @version: $ */ public class Main { public static void main(String[]args){ int[] arr = new int[]{0,1,1,2,4,4,1,3,3,2,6}; Solution solution = new Solution(); System.out.println(Arrays.toString(solution.getLeastNumbers(arr,6))); } } class Solution { public int[] getLeastNumbers(int[] arr, int k) { //选择排序 int index = 0; for(int i=0;i<arr.length;i++){ index = i; for(int j =i;j<arr.length;j++){ if(arr[j]<arr[index]){ index = j; } } swap(arr,index,i); } //拿出前k个元素,组成数组 int[] arr1 = new int[k]; System.arraycopy(arr,0,arr1,0,k); return arr1; } //交换方法 public void swap(int[]arr,int i,int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }