首页 > 其他分享 >LeetCode刷题 堆

LeetCode刷题 堆

时间:2024-09-07 18:02:50浏览次数:7  
标签:heapq 堆顶 nums min 元素 heap LeetCode 刷题

一:堆

1、一种二叉树的结构(完全二叉树)

2、完全二叉树:从上到下;从左到右;填满

3、最大堆:根节点的权值大于孩子节点

4、最小堆:根节点的权值依次小于孩子节点

5、常用操作

#创建堆(最大堆,最小堆)
#添加元素
#获取堆顶元素
#删除堆顶元素
#堆的长度
#堆的遍历

二:刷题


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

#方法1 数组
def func(nums,k):
    nums.sort()
    return nums[-k]
nums=[3,2,3,1,2,4,5,5,6]
k = 4
print(func(nums,k))
#方法2 最大堆
import heapq

def func(nums, k):
    # Step 1: 取数组的前 k 个元素,构建最小堆
    min_heap = nums[:k]
    heapq.heapify(min_heap)  # 将列表转换为最小堆

    # Step 2: 遍历剩余的元素
    for num in nums[k:]:
        if num > min_heap[0]:  # 如果当前元素大于堆顶元素
            heapq.heappop(min_heap)  # 移除堆顶元素
            heapq.heappush(min_heap, num)  # 将当前元素加入堆

    # Step 3: 返回堆顶元素
    return min_heap[0] 

标签:heapq,堆顶,nums,min,元素,heap,LeetCode,刷题
From: https://www.cnblogs.com/gsupl/p/18401981

相关文章

  • 【Leetcode:LCR 101. 分割等和子集 + 递归 + 记忆化搜索 + dp】
    ......
  • LeetCode刷题-哈希表
    一:哈希表1、有key:value键值对这样的概念;就是字典;通过key得到value2、hash碰撞问题:就是key的内存地址相同;使用链表的方法解决3、字典常见操作#创建哈希表hash_tabel={}#添加元素hash_tabel['name']='admin'hash_tabel['age']=25#删除元素delhash_tabel['name']#修改元......
  • 线性dp:LeetCode516 .最长回文子序列
    LeetCode516.最长回文子序列题目叙述:力扣题目链接(opensnewwindow)给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例1:输入:s="bbbab"输出:4解释:一个可能的......
  • 1143. 最长公共子序列(leetcode)
    https://leetcode.cn/problems/longest-common-subsequence/description/经典题,老题回顾classSolution{publicintlongestCommonSubsequence(Stringtext1,Stringtext2){//f[i][j]表示所有在第一个序列前i个数中选择,在第二个序列前j个数中选择得到的最长......
  • LeetCodeTest算法测试 传递一个数组和一个特定的目标整型数字,返回的两个数组元素相加
    1importjava.util.ArrayList;2importjava.util.List;34publicclassLeetCodeTest{5publicstaticvoidmain(String[]args){67int[]intArr=newint[]{2,7,11,15};8List<CustomerIntIndex>customerIntIndexL......
  • 718. 最长重复子数组(leetcode)
    https://leetcode.cn/problems/maximum-length-of-repeated-subarray/难点是在于状态定义,需要考虑到以第i个数为结尾,以第j个数为结尾的最长重复子数组这样的定义而递推就很简单,只需要发生重复时+1即可,和之前的一维的,即最长子数组一样classSolution{publicintfind......
  • 674. 最长连续递增序列(leetcode)
    https://leetcode.cn/problems/longest-continuous-increasing-subsequence/description/classSolution{publicintfindLengthOfLCIS(int[]nums){//f[i]表示以第i个数为结尾的最长连续递增序列//以倒数第2个数划分子集//f[i]=if(nums......
  • 300. 最长递增子序列(leetcode)
    https://leetcode.cn/problems/longest-increasing-subsequence/description/classSolution{publicintlengthOfLIS(int[]nums){//f[i]表示以第i个数为结尾的最长严格上升子序列//以倒数第二个数是多少来划分子集//f[i]=max(f[i-1],f[......
  • 【每日刷题】Day112
    【每日刷题】Day112......
  • 714. 买卖股票的最佳时机含手续费(leetcode)
    https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/classSolution{publicintmaxProfit(int[]prices,intfee){//f[i][j]表示前i天进行交易购买,j=0表示持有股票,j=1表示未持有股票,划分两个状态//f[i][0]=......