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

相关推荐
shehuiyuelaiyuehao2 小时前
1计算机是如何工作的
java·计算机网络
letisgo52 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
水域安全老周2 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
三8443 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker
暮雨哀尘3 小时前
Java 基础练习(一):创建类并调用对象
java·开发语言
Msshu1233 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
想要入门的程序猿3 小时前
回调函数学习
java·网络·学习
泡海椒3 小时前
动态代理核心原理:JQuick-Java接口规则自动生成机制解析
java·开发语言·python
步行cgn4 小时前
Spring 启动报错:BeanFactory not initialized 的原因与解决
java·python·spring
步行cgn4 小时前
Spring 报错:No bean class specified on bean definition 的原因与解决
java·后端·spring