leetcode 215. 数组中的第K个最大元素 golang实现

最小堆排序的实现(Go) 最小堆的特点是其父节点的值不大于任何一个字节点的值, 实现的是升序排序。 最小堆实现排序的原理,构建一个堆,不断的删除堆顶,这里的删除并不是完全删除, 而是将堆顶移动到末尾,然后父节点开始下沉操作,最后成为一个有序序列。 代码如下: package main import fmt func buidHeap(a []int, n int) { //heapify from the last parent node for i := n / 2; i >= 1; i-- { heapifyUpToDown(a, i, n) } } // 排序索引从 立即下载
描述
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
思路
维护一个最小堆即可 每次判断堆顶元素和新建入的元素 如果新元素大于堆顶则替换堆顶元素 重新排序 
实现
func findKthLargest(nums []int, k int) int {
    if len(nums) < k{
        return 0
    }

    heap := make([]int, 0)
    for _, num := range nums{
        if len(heap) < k{
            heap = append(heap, num)
            if len(heap) == k{
                buildHeap(heap)
            }
            continue
        }

        if num > heap[0]{
            heap[0] = num
            heapHelp(heap, k, 0)
        }
    }

    return heap[0]
}

func buildHeap(heap []int){
    size := len(heap)

    for i := size - 1; i >= 0; i--{
        heapHelp(heap, size, i)
    }

    return
}

func heapHelp(heap []int, size, curRoot int){
    left := 2*curRoot+1
    right := 2*curRoot+2
    smallest := curRoot

    if left < size && heap[left] < heap[smallest]{
        smallest = left
    }

    if right < size && heap[right] < heap[smallest]{
        smallest = right
    }

    if smallest != curRoot{
        heap[smallest], heap[curRoot] = heap[curRoot], heap[smallest]
        heapHelp(heap, size, smallest)
    }

    return
}
Hyper-V显卡直通实战:手把手解决Windows 11虚拟机错误码43(附完整参数配置) 本文详细解析了在Windows 11 Hyper-V虚拟机中配置显卡直通时遭遇错误码43的根源,并提供了从环境检查、核心PowerShell命令(如Set-VMGpuPartitionAdapter)配置到虚拟机内驱动替换的完整实战解决方案,帮助用户彻底解决显卡驱动无法加载的问题。 阅读详情

相关推荐

华硕笔记本+Ubuntu 20.04:用cpupower解决Intel CPU频率上不去/功耗墙问题实战

本文详细介绍了在华硕笔记本Ubuntu 20.04系统下使用cpupower工具解决Intel CPU频率受限和功耗墙问题的实战方法。通过禁用Intel P-State驱动、配置userspace模式以及高级调优技巧,帮助用户突破性能瓶颈,提升编译和计算效率。

weixin_42561476的博客 524

LeetCode215. 数组中第K个最大元素Golang版

LeetCode215. 数组中第K个最大元素Golang版 1. 问题描述 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 2. 思路 2.1. 思路1 冒泡排序思想,冒k次泡,记录每一轮气泡的大小

菜到不敢run 519

ComfyUI-Impact-Subpack插件安装避坑指南:为什么你的UltralyticsDetectorProvider节点还是找不到?

本文深入解析了ComfyUI-Impact-Subpack插件的安装与排障问题,特别是针对UltralyticsDetectorProvider节点缺失的常见问题提供了详细的解决方案。从底层机制到高阶应用,涵盖了手动安装、模型配置、性能优化等关键步骤,帮助用户彻底解决插件依赖关系断裂问题。

Jerry的专栏 1152

[LeetCode][Golang] 215. 数组中的第K个最大元素

题目: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 1 <= k <= nums.length <= 104 -104 <= nums[i] <= 104 本算法题目有两种比较好的方法,分别为使用小顶堆和使用快速选择。 题解一: 首先我们使用小顶堆的方法求解,先贴代码(Go语言): type IntHeap []int func (h IntHeap)

DecXu 974

四轮两驱小车(四):STM32驱动5路灰度传感器PID循迹

之前买了一批5路灰度传感器,想用这传感器进行循迹,无奈网上和官方的资料提供的还是比较少,这里还是做一下当初的学习记录。

weixin_51651698的博客 6万+

51单片机也能玩转信号发生器?手把手教你用DAC0832和LM358输出四种标准波形

本文详细介绍了如何使用51单片机和DAC0832芯片搭配LM358运放,自制低成本信号发生器,实现正弦波、矩形波、三角波和锯齿波四种标准波形的输出。从硬件选型、电路设计到编程实现,手把手教你完成这一实用电子项目,总成本不到50元,适合电子爱好者和学生实践。

weixin_30530939的博客 551

数组中第 K 大的数(LeetCode 215)

第一次划分时间复杂度是 O(n),第二次划分是 O(n/2)。最差的情况,最后一次即 logn 次找到第 K 大的数,那么时间复杂度为 n + n/2 + n/4 + …从快排的核心操作中可以看到,如果分界值的位置刚好是 K(升序为从后往前数),那么该分界值为数组中第 K 大的数。其核心操作是从数组中选择任意一个元素(通常选取第一个)作为分界值,通过双指针遍历数组,采用交换的方式使得左边的元素都小于等于它,右边的元素都大于等于它。先回顾一下快速排序,其属交换类排序,采用分治的思想,完成对无序数列的排序。

Doublelv 的博客专栏。 1347

plotly包安装_Plotly(一)安装指南

plotly,是一个快速完善并崛起的交互式的、开源的绘图库库,Python库则是它的一个重要分支。现已支持超过40种独特的图表类型,涵盖了广泛的统计、金融、地理、科学和三维用例。Plotly 通过JavaScript构建,能基于Web显示实现交互式的可视化效果(Plotly最强大之处之一)。所以它的图形呈现可以方便的显示于Jupyter notebook(基于html)、独立的html中(直接显示...

weixin_35907189的博客 3472

Golang | Leetcode Golang题解之第215题数组中的第K个最大元素

Golang | Leetcode Golang题解之第215题数组中的第K个最大元素

weixin_66442839的博客 400

把 SAP BTP Destination 写进 MTA:一段 com.sap.application.content 配置背后的部署编排学

MTA内容模块解析:SAP BTP中的声明式部署机制 本文详细解析了mta.yaml中com.sap.application.content模块在SAP BTP云环境中的作用。该模块通过声明式配置实现内容投递,无需编译或部署代码。核心功能包括: Destination创建:通过content-target:true标识将配置投递到Destination服务 HTML5应用部署:将静态资源投递到HTML5 Application Repository 安全集成:配置XSUAA服务实现OAuth2用户令牌交换

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 165

手把手教你学pcie--内存管理和保护机制(一):MPU与其他内存管理和保护机制详解

MPU(Memory Protection Unit)是一种专门用于 ​。,这些机制通常协同工作,形成多层防御体系,兼顾安全性、性能和灵活性。

MHD0815的博客 279

数据结构与算法之堆: LeetCode 215. 数组中的第K个最大元素 (Ts, Py, Go版)

1 )基于js中原生sort api。2 )基于堆的数据结构和堆排序的方法。3 )基于冒泡排序。 4 ) 基于快速排序。

Wang的专栏 480

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

leetcode 215 数组中的第K个最大元素 Go实现

题目 未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kth-largest-elem

KylinMountain的笔记 404

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Golang 刷题之路】转世重修第二百一十五题:数组中的第K个最大元素

数组中的第K个最大元素是面试常见问题、类似于无序数组找中位数。两种为同一做法,我们使用快排进行排序、也是题目考察要点,快排是常见考题、通过简单的左右指针进行横移来进行原数组内进行排序,相比于归并排序、节省了空间。完成了快排,我们的学习之路也才开始启程,路途遥远,只求风雨兼程。

猫轻王的博客 509

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Day33】215.数组中的第K个最大元素

215.数组中的第K个最大元素

2301_80182689的博客 424

go语言heap包的使用

文章目录go语言heap的使用前言源码分析例1:实现基于int数据集的二叉堆例2:实现基于string数据集的二叉堆实战练习: Leetcode-215.数组中的第k个最大元素 go语言heap的使用 前言 在写算法的时候,遇到类似前n个最小值,最大值等问题,我们可以很容易想到堆来解。 go语言提供了一个heap的包,而不需要我们自己手动的去实现一个堆。 接下来学习一下它的使用。 container/heap 包的使用 源码分析 heap里面有一个借口Interface,这个Interface就是我们

qq_38557583的博客 1593

【算法】大厂常喜欢问的算法题

今天是 Kevin 的算法之路的第2天。为大家讲解 LeetCode 第 215 题,是一道中等难度的题目。其中的 Top K 解法大厂很喜欢考查。 每日一笑 哥们几个逛街,看到电线杆子上有个重金求子的广告,我问旁边的马力:“这些是不是骗人的?” 他说:“算你聪明,他们会找你收体检费,看你的基因好不好,还有什么关系费,乱七八糟的费,加起来有6,7万。” 我不屑的说:“这么明显的骗局有人上当吗?” 他说:“肯定有啊,不然我怎么知道的那么清楚!” 题目描述 在未排序的数组中找到第 k 个最大的元素。请注意

qq_36452584的博客 846

Leetcode 215: 数组中的第K个最大元素[CPP][GO]

问题描述 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 思路 排序的思想,很简单...

KongJHong的博客 301

LeetCode215. 数组中的第K个最大元素

1.问题 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 原题链接; 2.方法 方法一: 先排序,再获得第K大元素。 class Solution { public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); ...

rosefun96的博客 389

【力扣215-数组中的第K个最大元素】两种解法:普通法+随机pivot快排(python3+golang)

目录题目描述思路题解方法一:普通法方法二:随机pivot快排 题目描述 https://leetcode-cn.com/problems/kth-largest-element-in-an-array 思路题解 方法一:普通法 把每次的最大值求出来,删除掉,直到第k次,输出最大值 class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: if not nums:return -1

戴某某 836

数组中的第K个最大元素(LeetCode第215题)java实现

一、题目描述 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 二、解题思路 ...

alan_gaohaodong的博客 957

Leetcode_NO215_数组中的第K个最大元素

题目描述: 在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 这道题,转化下思路,第K个最大的元素就是前K个元素中最小的元素。 构建一个小根堆,堆的大小为K 1)当堆的大小小于K的时候,依次向其中加入新元素 2)当堆的大小=k 时,...

迎难而上 666

可视化图解算法51:寻找第K大(数组中的第K个最大的元素)

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

weixin_42117918的博客 1304

leetcode腾讯精选练习50(40)——215.数组中的第K个最大元素

leetcode腾讯精选练习50(40)——206.反转链表 题目描述 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 来源:力扣(LeetCode) 链接:...

优快云zhwk的博客 260

​ leetcode 215. 数组中的第K个最大元素 medium ​

leetcode215. 数组中的第K个最大元素 medium 题目描述: 解题思路: 方法一: 快速选择 (时间复杂度 O(n)空间复杂度O(1)) 方法二: 求第k个最大, 用最小堆 (时间复杂度 O(nlogk), 空间O(k)) 代码: // 快速选择 class Solution { public: int findKthLargest(vector<int>& nums, int k) { if ...

speargod的博客 461

算法探索_数组中的第K个最大元素

问题描述: 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5示例2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kth-largest-el.

赵星海 326
上一篇: leetcode 200. 岛屿数量 golang实现
下一篇: leetcode 33. 搜索旋转排序数组 golang实现
tzh_linux
博客等级 码龄12年 12粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值