剑指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个数放进数组返回就可以了。

相关推荐
Aaswk4 分钟前
刷题笔记(回溯算法)
数据结构·c++·笔记·算法·leetcode·深度优先·剪枝
m0_750580307 分钟前
Java并发—Java线程
java·开发语言
QuZero19 分钟前
JDK7 ConcurrentHashMap principle
java·哈希算法
Frostnova丶28 分钟前
(11)LeetCode 239. 滑动窗口最大值
数据结构·算法·leetcode
独断万古他化36 分钟前
【Java 实战项目】多用户网页版聊天室:消息传输模块 —— 基于 WebSocket 实现实时通信
java·spring boot·后端·websocket·ajax·mybatis
yyt36304584143 分钟前
spring单例bean线程安全问题讨论
java·spring
参.商.1 小时前
【Day48】46. 全排列
leetcode·golang
我是大猴子1 小时前
事务失效的几种情况以及是为什么(详解)
java·开发语言
wertyuytrewm2 小时前
Java面试——Java基础
java·jvm·面试
czlczl200209252 小时前
RAG实现思路流程
java·jvm