最小的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;
    }
}

 

posted @ 2020-03-26 11:15  大朱123  阅读(139)  评论(0编辑  收藏  举报