leetcode Heap/Queue

devtools/2025/1/17 22:13:12/

3066. 超过阈值的最少操作数 II

输入:nums = [2,11,10,1,3], k = 10
输出:2
解释:第一次操作中,我们删除元素 1 和 2 ,然后添加 1 * 2 + 2 到 nums 中,nums 变为 [4, 11, 10, 3] 。
第二次操作中,我们删除元素 3 和 4 ,然后添加 3 * 2 + 4 到 nums 中,nums 变为 [10, 11, 10] 。
此时,数组中的所有元素都大于等于 10 ,所以我们停止操作。
使数组中所有元素都大于等于 10 需要的最少操作次数为 2 。

python">class Solution:def minOperations(self, nums: List[int], k: int) -> int:res = 0h = nums[:]heapify(h)while h[0] < k:x = heappop(h)y = heappop(h)heappush(h, x + x + y)res += 1return res
  • 首先想到排序才能获得最小值,但如果每次更新都排序或2分搜索,巨慢,所以直接使用heap priority Q
  • 这里面有两个点要注意:
    • heappush 和 heappop
    • 以及,用"加法"替换了"乘法"

Heap Vs. Priority Queue

Heap 直接对底层进行操作,相当快和轻量

python">import heapq
h = [10, 5, 20]
heapq.heapify(h) #这就是如何将已有list转化为heap

Priority queue在工程项目里更多用到,主要原因还是多线程的安全
以下是等效的例子:

它们最终都会输出:
处理任务: 打电话 (优先级: 1)
处理任务: 写邮件 (优先级: 2)
处理任务: 开会 (优先级: 3)

python">import heapqtasks = [(2, '写邮件'), (1, '打电话'), (3, '开会')]  # 优先级, 任务
heapq.heapify(tasks)while tasks:priority, task = heapq.heappop(tasks)print(f'处理任务: {task} (优先级: {priority})')
python">from queue import PriorityQueuetasks = PriorityQueue()
tasks.put((2, '写邮件'))
tasks.put((1, '打电话'))
tasks.put((3, '开会'))while not tasks.empty():priority, task = tasks.get()print(f'处理任务: {task} (优先级: {priority})')

http://www.ppmy.cn/devtools/151373.html

相关文章

【Qt】03-页面切换

前言一、按键实现界面切换1.1 创建新的类文件1.1.1 创建1.1.2 细节选择 1.2 代码以及需要注意的点mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 1.3 结果展示 二、signal关键字2.1 代码以及解释mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h解释 2.2 现象 三…

软考信安20~数据库系统安全

1、数据库安全概况 1.1、数据库安全概念 数据库是网络信息系统的基础性软件,承载着各种各样的数据,成为应用系统的支撑平台。 国外主流的数据库系统有MSSQL 、MySQL 、Oracle 、DB2 等,国产数据库系统主要有人大金仓、达梦等。 1.2、数据库安全威胁 授权的误用(Misuses…

C# OpenCV机器视觉:二维码识别

在一个风平浪静却又暗藏玄机的午后&#xff0c;阿辉正坐在他那堆满各种电子元件和代码书籍的办公桌前&#xff0c;对着电脑屏幕上那一串串神秘的代码发呆。突然&#xff0c;手机铃声如同一道尖锐的闪电划破了平静的空气&#xff0c;吓得他差点把手里的咖啡杯打翻。原来是公司的…

LeetCode 916. Word Subsets

&#x1f517; https://leetcode.com/problems/word-subsets 题目 给两个字符串数组&#xff0c;word1 和 word2若每一个 word2 中的字符串&#xff0c;都是字符串 x 的 subset&#xff0c;则表示该字符串 x 是 universal 的返回 word1 中的 universal 的字符串 思路 对 wo…

晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

阿里云无影云电脑的使用场景

阿里云无影云电脑是一种安全、高效的云上虚拟桌面服务&#xff0c;广泛应用于多种场景&#xff0c;包括教育、企业办公、设计与视频制作、客服中心等。以下是九河云总结的无影云电脑的几个典型使用场景&#xff1a; #### 1. 教育机构 - **业务痛点**&#xff1a; - 学生实践操…

thinkphp 5.0 结合redis 做延迟队列,队列无法被消费

目录 一、Linux 环境下 二、如何验证消息队列被正确监听 一、Linux 环境下 项目部署在Linux 环境下&#xff0c;首先找到项目的部署路径&#xff0c;接着输入命令,这个命令是以守护进程方式进行监听你的队列&#xff0c;只要redis 不关闭 就可以一直监听这个队列 nohup php …

安装指南:LLaMA Factory、AutoGPTQ 和 vllm

安装指南&#xff1a;LLaMA Factory、AutoGPTQ 和 vllm 在本文中&#xff0c;我们将详细介绍如何安装 LLaMA Factory、AutoGPTQ 和 vllm&#xff0c;这些工具在大型语言模型&#xff08;LLMs&#xff09;和视觉语言模型&#xff08;VLMs&#xff09;的微调和量化中非常有用。我…