当前位置: 首页 > wzjs >正文

廊坊企业网站服务广东省住房和建设局官方网站

廊坊企业网站服务,广东省住房和建设局官方网站,郑州电力高等专科学校学费多少,购买的网站怎么看网站空间大小牛客网 面试笔试 TOP101 | LeetCode 面试题 17.14. 最小K个数 1. 题目 描述 给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。 数…

牛客网 面试笔试   TOP101    |     LeetCode 面试题 17.14.  最小K个数

1. 题目

描述

给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。

数据范围:0≤k,n≤10000,数组中每个数的大小0≤val≤1000

要求:空间复杂度 O(n),时间复杂度 O(nlogn)

示例1

输入:

[4,5,1,6,2,7,3,8],4

返回值:

[1,2,3,4]

说明:

返回最小的4个数即可,返回[1,3,2,4]也可以        

示例2

输入:

[1],0

返回值:

[ ]

示例3

输入:

[0,1,2,1,2],3

返回值:

[0,1,1]

2. 解题思路

最小的K个数的求解问题是典型的Top K问题,一般通过堆来完成。先来看看什么是堆:

堆" 是一个在计算机科学中经常使用的术语,它通常指的是一种特殊的树形数据结构——二叉堆(binary heap)。二叉堆通常满足堆属性(heap property),即父节点的值总是大于或等于(或小于或等于,取决于堆的类型)其子节点的值。

堆是一种完全二叉树结构,并满足以下性质之一:

  • 最大堆(Max-Heap):每个父节点的值大于或等于其子节点的值。

  • 最小堆(Min-Heap):每个父节点的值小于或等于其子节点的值。

核心特性

  1. 完全二叉树:

    除了最后一层,其他层节点全部填满,且最后一层节点尽可能靠左排列。

  2. 高效操作:

    插入和删除操作的时间复杂度为 O(log n),建堆时间复杂度为 O(n)

堆的存储方式

  • 数组实现(最常用):

    • 父节点索引为 i,则左子节点为 2i+1,右子节点为 2i+2

    • 子节点索引为 i,则父节点为 (i-1)//2

  • 示例

    (数组表示的堆):

    <span style="background-color:#f8f8f8 !important">数组:[9, 5, 3, 2, 4, 1]
    对应完全二叉树:9/   \5     3/ \   /2  4 1

堆的应用场景

优先队列:任务调度、Dijkstra 算法。

  • 堆排序:时间复杂度 O(n log n),原地排序但不稳定。

  • Top K 问题:快速找到数据流中最大/最小的 K 个元素。

  • 合并有序序列:如合并 K 个有序链表。

堆(Heap)是一种特殊的树形数据结构,通常以完全二叉树的形式实现,具有以下核心特性:


常见误区

  1. 堆与内存堆:

    数据结构中的“堆”与程序内存管理中的“堆”(Heap Memory)完全不同。

  2. 堆的有序性:

    堆仅保证根节点是极值,子树之间不一定有序。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python编码:Python数据结构LeetCode笔试面试算法_哔哩哔哩_bilibiliPython数据结构LeetCode笔试面试算法,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1372869

  • Java编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367923

  • Golang编码:LeetCode数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibiliLeetCode数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1364949

3. 编码实现

核心代码如下:

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param input int整型一维数组* @param k int整型* @return int整型一维数组*/
func GetLeastNumbers_Solution(input []int, k int) []int {// write code hereres := make([]int, 0)if k == 0 || len(input) < k {return res}//1.定义一个大顶堆(最大元素在最上面)h := make(MyHeap, 0, k)heap.Init(&h)//2.先将k个元素加入堆for i := 0; i < k; i++ {heap.Push(&h, input[i])}//3.如果当前元素小于堆顶的元素(待加入的元素比堆中的小)则将堆中的最大元素弹出,新元素入堆//弹出的作用:保证堆中只存储最小的k个数据for i := k; i < len(input); i++ {if input[i] < h[0] {heap.Pop(&h)heap.Push(&h, input[i])}}//4.堆中的元素弹出,存储到数组中返回for h.Len() > 0 {res = append(res, heap.Pop(&h).(int))}return res
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python编码:Python数据结构LeetCode笔试面试算法_哔哩哔哩_bilibiliPython数据结构LeetCode笔试面试算法,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1372869

  • Java编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367923

  • Golang编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364949

4.小结

最小的K个数可以通过大顶堆完成,具体操作步骤为:

  1. 定义一个大顶堆,堆的大小为 K;

  2. 堆中存储最小的K个数;

  3. 先从数组中取出 K 个元素加入堆;

  4. 再从数组中取出其他元素,如果该元素小于堆顶的元素,从堆中弹出元素,将该元素加入堆;

  5. 数组中的元素取完,堆中的数据就是最小的K个数。

《数据结构与算法》深度精讲课程正式上线啦!7 大核心算法模块全解析:

  ✅   链表

  ✅   二叉树

  ✅   二分查找、排序

  ✅   堆、栈、队列

  ✅   回溯算法

  ✅   哈希算法

  ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ss897667807

  • Java编码实现:LeetCode数据结构笔试面试算法-Java版_哔哩哔哩_bilibiliLeetCode数据结构笔试面试算法-Java版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ss161443488

  • Golang编码实现:LeetCode数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibiliLeetCode数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ss63997

对于数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:千磨万击还坚劲,任尔东西南北风。


文章转载自:

http://ROngpErh.grpfj.cn
http://iiJRIMXK.grpfj.cn
http://xvnUbCSj.grpfj.cn
http://Fy14ChUE.grpfj.cn
http://QEdmbVzg.grpfj.cn
http://lTmLXTjP.grpfj.cn
http://EdsaqSeu.grpfj.cn
http://x2hgXWT7.grpfj.cn
http://0CcipOjS.grpfj.cn
http://gBLClMtr.grpfj.cn
http://thlVVewj.grpfj.cn
http://VgW0pieo.grpfj.cn
http://9ESHegSC.grpfj.cn
http://cfHlPBcL.grpfj.cn
http://FegG9L4y.grpfj.cn
http://Ngbx8j87.grpfj.cn
http://VhQAqb1R.grpfj.cn
http://y7XibcOg.grpfj.cn
http://XQsR1IXw.grpfj.cn
http://uKsfTX42.grpfj.cn
http://70hIqECp.grpfj.cn
http://BRI6pzMA.grpfj.cn
http://99rVgZhq.grpfj.cn
http://bCFp0NgI.grpfj.cn
http://wOSQ185m.grpfj.cn
http://MQplKKzv.grpfj.cn
http://Am6PVX1d.grpfj.cn
http://ADoyQaIl.grpfj.cn
http://zonQiRXz.grpfj.cn
http://Th8jCx4j.grpfj.cn
http://www.dtcms.com/wzjs/664598.html

相关文章:

  • 建设银行网站无法登陆潜江网站设计
  • 招标网站哪个好用眉山网站开发
  • 个人作品集网站wordpress怎么汉化插件
  • 制作板块的网站开发软件app需要多少钱
  • 东莞网站建设网站建立万户网站做的怎样
  • 学院网站建设1688采购平台
  • 做网站哪家正规WordPress多站点绑定域名
  • 淄博网站制作设计公司首选大型网站建站公司
  • 中为网站建设采购网站排名
  • 成都找人做网站s什么网站可以接单做设计赚钱
  • 网站建设内容策略有哪些wordpress工作发布时间
  • 公司网络营销策划书范文佛山手机网站建设优化
  • 网站域名申请流程鄂州做网站报价
  • 甘肃网站建设公司哪家好正规网站优化推广
  • 空间商指定的网站目录wordpress淘客模板
  • 网站维护细则18款免费软件app下载
  • 教育网站如何做seo学校做的网站外面访问不了
  • 杭州战争网站建设做网页的
  • 第一百四十七章 做视频网站软件开发合同模板下载
  • 制作网站的公司叫什么wordpress 小工具区域
  • 那种导航网站mq网站开发
  • 国外优秀网站中国公路工程建设网站
  • 网站建设错误代码50019邯郸网站优化
  • 建设银行手机绑定网站南昌建筑工程公司
  • 摄影网站设计与制作网站cms系统下载
  • 学校网站开发文档长沙建设信息中心网站
  • 专业做动漫的网站景安wordpress主机
  • 北京工商局网站怎么做增资找代理产品上哪个平台
  • 免费网站建设联系电话seo网站页面优化包含
  • 网上做网站怎么防止被骗网站还在建设就已经可以访问了_影响后期百度