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

相关推荐
观望过往18 分钟前
Spring Boot 集成 EMQ X 4.0 完整技术指南
java·spring boot·后端·emqx
ml魔力信息27 分钟前
一枚指纹,开启工业IoT设备安全与权限分级实践
java·物联网·安全
会飞的小蛮猪43 分钟前
SkyWalking运维之路(Java探针接入)
java·运维·经验分享·容器·skywalking
通域1 小时前
解决启动IDEA后CPU 及内存占用过高配置调整
java·ide·intellij-idea
谈笑也风生1 小时前
只出现一次的数字 II(一)
数据结构·算法·leetcode
一袋米扛几楼981 小时前
【软件安全】C语言特性 (C Language Characteristics)
java·c语言·安全
m0_748248022 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
java·开发语言·c++·算法
aloha_7892 小时前
测试开发工程师面经准备(sxf)
java·python·leetcode·压力测试
im_AMBER2 小时前
Leetcode 47
数据结构·c++·笔记·学习·算法·leetcode
我命由我123452 小时前
Java 并发编程 - Delay(Delayed 概述、Delayed 实现、Delayed 使用、Delay 缓存实现、Delayed 延迟获取数据实现)
java·开发语言·后端·缓存·java-ee·intellij-idea·intellij idea