剑指offer40.最小的k个数

简直不要太简单了这道题,先给数组排个序,然后输出前k个数就好了。我用的是快排,这是我的代码:

java 复制代码
class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {
       int n = arr.length;
       quickSort(arr, 0, n-1);
       int[] res = new int[k];
       for(int i =0;i<k;i++){
           res[i] = arr[i];
       }
       return res;


    }
    private void quickSort(int[] arr, int l, int r){
       if(l>=r)return;
       int i = l;int j = r;
       int key = arr[i];
       while(i<j){
          while(arr[j] >= key && i<j)j--;
          while(arr[i] <= key && i<j)i++;
          if(i<j){
              int temp = arr[i];
              arr[i] = arr[j];
              arr[j] = temp;
          }
       }
       arr[l] = arr[i];
       arr[i] = key;
       quickSort(arr, l, i-1);
       quickSort(arr, i+1, r);
    }
}

题解除了这种方法,还有一种方法用的是优先队列,先取前k个数放进优先队列,然后往后遍历,如果这个数小于队列顶部,就出队把这个数放进队列,最后把队列里的k个数放进数组返回就可以了。

相关推荐
DASXSDW2 分钟前
NET性能优化-使用RecyclableBuffer取代RecyclableMemoryStream
java·算法·性能优化
kfepiza8 分钟前
CAS (Compare and Swap) 笔记251007
java·算法
kfepiza11 分钟前
Java的`volatile`关键字 笔记251007
java
风雨同舟的代码笔记11 分钟前
JDK1.8 String类源码学习
java
苹果醋317 分钟前
数据结构其一 线性表
java·运维·spring boot·mysql·nginx
华仔啊20 分钟前
前后端防重复提交的 6 种落地实现:从按钮禁用到 AOP 全自动防护
java·后端
墨染点香37 分钟前
LeetCode 刷题【103. 二叉树的锯齿形层序遍历、104. 二叉树的最大深度、105. 从前序与中序遍历序列构造二叉树】
算法·leetcode·职场和发展
lllsure39 分钟前
Java Stream API
java·开发语言
chirrupy_hamal1 小时前
IO 流篇
java
Le1Yu1 小时前
2025-10-6学习笔记
java·笔记·学习