[剑指offer] 最小的K个数

简介: 本文首发于我的个人博客:尾尾部落题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

本文首发于我的个人博客:尾尾部落

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

解题思路

两种方法:

  • 法1:先对数组排序,然后取出前k个
  • 法2:利用最大堆保存这k个数,每次只和堆顶比,如果比堆顶小,删除堆顶,新数入堆。

参考代码

法1:

import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> res = new ArrayList<Integer>();
        if(input == null || k ==0 || k > input.length)
            return res;
        Arrays.sort(input);
        for(int i=0; i<k; i++)
            res.add(input[i]);
        return res;
    }
}

法2:

import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.Comparator;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> res = new ArrayList<Integer>();
        if(input == null || k ==0 || k > input.length)
            return res;
        PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(k, new Comparator<Integer>() { 
            public int compare(Integer e1, Integer e2) {
                return e2 - e1;
            }
        });
        for(int i=0; i<input.length; i++){
            if(maxHeap.size() != k)
                maxHeap.offer(input[i]);
            else{
                if(maxHeap.peek() > input[i]){
                    maxHeap.poll();
                    maxHeap.offer(input[i]);
                }
            }
        }
        for(Integer i: maxHeap){
            res.add(i);
        }
        return res;
    }
}
目录
相关文章
|
6月前
|
SQL Java 数据库连接
MyBatis 实现分页的机制
MyBatis 的分页机制主要依赖于 `RowBounds` 对象和分页插件。`RowBounds` 实现内存分页,适合小数据量场景,通过设定偏移量和限制条数对结果集进行筛选。而针对大数据量,则推荐使用分页插件(如 PageHelper),实现物理分页。插件通过拦截 SQL 执行,动态修改语句添加分页逻辑,支持多种数据库方言。配置插件后,无需手动调整查询方法即可完成分页操作,提升性能与灵活性。
137 0
|
JSON API 开发者
调用API接口获取淘宝店铺所有商品:详细指南与代码实践
随着电子商务的快速发展,淘宝作为中国最大的网络购物平台之一,汇聚了海量的商品和店铺信息。对于开发者、电商从业者以及数据分析师而言,获取淘宝店铺的商品信息具有重要的应用价值。本文将通过详细的指南和代码实践,介绍如何调用淘宝API接口来获取淘宝店铺的所有商品。
|
移动开发 JavaScript 小程序
Vue3之程序初始化(createApp)
Vue3之程序初始化(createApp)
406 0
|
弹性计算 容灾 定位技术
构建弹性高可用的云计算环境:ECS的扩展与高可用性设计
本文深入研究了云服务器ECS的自动伸缩和高可用性设计,重点关注了弹性伸缩原理与应用、自动伸缩策略、负载均衡器的使用,以及跨地域容灾架构的建立。通过实际代码示例,读者能够全面了解如何在云计算环境中实现弹性的资源管理和高可用性的应用架构。
647 0
|
前端开发 JavaScript
Html鼠标右键菜单代码
html菜单显示界面 *{ margin: 0; padding: 0; } #btn{ width: 60px; h...
1038 0
|
SQL
[备忘]删除SQL Server中无登录名的用户
这个问题通常会在还原虚拟主机的备份SQL文件后发生,原先在虚拟主机上的用户会被还原到本地,但是本地没有权限对其进行操作。 SELECT N'ALTER AUTHORIZATION ON SCHEMA::'+ QUOTENAME(SCH.
820 0
|
4天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1106 0
|
3天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
529 10