专业的企业网站建设公司推广网站注册赚佣金

bicheng/2026/1/23 0:33:47/文章来源:
专业的企业网站建设公司,推广网站注册赚佣金,网页无法访问手机,合肥动画制作公司算法沉淀——优先级队列 01.最后一块石头的重量02.数据流中的第 K 大元素03.前K个高频单词04.数据流的中位数 优先队列#xff08;Priority Queue#xff09;是一种抽象数据类型#xff0c;它类似于队列#xff08;Queue#xff09;#xff0c;但是每个元素都有一个关联的… 算法沉淀——优先级队列 01.最后一块石头的重量02.数据流中的第 K 大元素03.前K个高频单词04.数据流的中位数 优先队列Priority Queue是一种抽象数据类型它类似于队列Queue但是每个元素都有一个关联的优先级。在优先队列中元素按照优先级从高到低或从低到高排列高优先级的元素先出队。这种数据结构可以用堆Heap来实现。 堆是一种二叉树结构有两种主要类型最大堆和最小堆。在最大堆中每个节点的值都大于或等于其子节点的值而在最小堆中每个节点的值都小于或等于其子节点的值。对于优先队列来说最大堆常常用于实现。 在堆中根节点的元素具有最高或最低优先级而且这一性质对于整个堆中的每个节点都成立。这确保了当我们从堆中移除元素时总是移除具有最高或最低优先级的元素。 优先队列的常见操作包括 插入Insertion将元素插入队列中。删除最大或最小元素移除并返回队列中具有最高或最低优先级的元素。 堆的实现可以通过数组或链表等数据结构。在使用数组实现堆时父节点和子节点之间的关系可以通过数组的索引关系来表示。在C中可以使用 std::priority_queue 来实现优先队列它默认使用最大堆也可以通过传递自定义比较函数来实现最小堆。 01.最后一块石头的重量 题目链接https://leetcode.cn/problems/last-stone-weight/ 有一堆石头每块石头的重量都是正整数。 每一回合从中选出两块 最重的 石头然后将它们一起粉碎。假设石头的重量分别为 x 和 y且 x y。那么粉碎的可能结果如下 如果 x y那么两块石头都会被完全粉碎如果 x ! y那么重量为 x 的石头将会完全粉碎而重量为 y 的石头新重量为 y-x。 最后最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下就返回 0。 示例 输入[2,7,4,1,8,1] 输出1 解释 先选出 7 和 8得到 1所以数组转换为 [2,4,1,1,1] 再选出 2 和 4得到 2所以数组转换为 [2,1,1,1] 接着是 2 和 1得到 1所以数组转换为 [1,1,1] 最后选出 1 和 1得到 0最终数组转换为 [1]这就是最后剩下那块石头的重量。 提示 1 stones.length 301 stones[i] 1000 思路 我们可以每次拿出最大的两个相比较有差值就将差值保留相等就都粉碎这样我们很容易想到使用堆去计算因为这符合堆的特性我们可以使用各语言库中的堆容器来计算。 创建最大堆Max Heap 通过 priority_queueint 创建一个默认为最大堆的优先队列将给定的石头数组中的元素加入最大堆中。迭代处理 使用一个循环迭代处理直到堆中剩余的元素个数小于等于1。从堆中取出两个最大的元素执行碎石操作 每次取出堆中的两个最大元素即石头的重量最大的两块执行碎石操作计算碎石后的重量将结果加回堆中。返回结果 当循环结束时堆中剩余的元素即为最后一块石头的重量或者堆为空返回相应的结果。 代码 class Solution { public:int lastStoneWeight(vectorint stones) {priority_queueint heap;for(int x:stones) heap.push(x);while(heap.size()1){int aheap.top(); heap.pop();int bheap.top(); heap.pop();if(ab) heap.push(a-b);}return heap.size()?heap.top():0;} };02.数据流中的第 K 大元素 题目链接https://leetcode.cn/problems/kth-largest-element-in-a-stream/ 设计一个找到数据流中第 k 大元素的类class。注意是排序后的第 k 大元素不是第 k 个不同的元素。 请实现 KthLargest 类 KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val) 将 val 插入数据流 nums 后返回当前数据流中第 k 大的元素。 示例 输入 [KthLargest, add, add, add, add, add] [[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]] 输出 [null, 4, 5, 5, 8, 8]解释 KthLargest kthLargest new KthLargest(3, [4, 5, 8, 2]); kthLargest.add(3); // return 4 kthLargest.add(5); // return 5 kthLargest.add(10); // return 5 kthLargest.add(9); // return 8 kthLargest.add(4); // return 8提示 1 k 1040 nums.length 104-104 nums[i] 104-104 val 104最多调用 add 方法 104 次题目数据保证在查找第 k 大元素时数组中至少有 k 个元素 思路 这里是典型的topk问题找的是第k个大的数所以我们使用一个k大的小堆就能很好的解决这个问题。 在构造函数中将初始的元素加入最小堆中并维护堆的大小为 K保证堆中只有前 K 大的元素。 当有新元素加入时将新元素加入最小堆中然后检查堆的大小是否超过 K如果超过则弹出堆顶元素。最终返回当前堆顶元素即为第 K 大的元素。这样通过不断地将新元素加入最小堆并保持堆的大小为 K可以在 add 操作后始终保持堆中的元素为前 K 大的元素而堆顶元素即为第 K 大的元素。 代码 class KthLargest {priority_queueint,vectorint,greaterint heap;int _k; public:KthLargest(int k, vectorint nums) {_kk;for(int x:nums){heap.push(x);if(heap.size()k) heap.pop();}}int add(int val) {heap.push(val);if(heap.size()_k) heap.pop();return heap.top();} };/*** Your KthLargest object will be instantiated and called as such:* KthLargest* obj new KthLargest(k, nums);* int param_1 obj-add(val);*/03.前K个高频单词 题目链接https://leetcode.cn/problems/top-k-frequent-words/ 给定一个单词列表 words 和一个整数 k 返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率 按字典顺序 排序。 示例 1 输入: words [i, love, leetcode, i, love, coding], k 2 输出: [i, love] 解析: i 和 love 为出现次数最多的两个单词均为2次。注意按字母顺序 i 在 love 之前。示例 2 输入: [the, day, is, sunny, the, the, the, sunny, is, is], k 4 输出: [the, is, sunny, day] 解析: the, is, sunny 和 day 是出现次数最多的四个单词出现次数依次为 4, 3, 2 和 1 次。注意 1 words.length 5001 words[i] 10words[i] 由小写英文字母组成。k 的取值范围是 [1, **不同** words[i] 的数量] **进阶**尝试以 O(n log k) 时间复杂度和 O(n) 空间复杂度解决。 思路 很显然这里这是还是topk问题还是使用堆来解决问题但是这里有两个比较条件所以我们要注意比较函数的实现主逻辑是找出前k个出现次数最多的所以整体我们建小堆还有一个附属条件次数相同时字典序小的排在前面所以在相同次数时我们相对于字符串建大堆将字母小的排在前面。 哈希表统计频率 使用 unordered_map 哈希表记录每个字符串出现的频率。优先队列 使用一个自定义的比较函数对象 cmp 作为优先队列的比较规则。按照频率从大到小排序若频率相同则按照字符串字典序从小到大排序。遍历哈希表将每个键值对字符串及其频率加入最小堆并保持堆的大小为 K当堆的大小超过 K 时弹出堆顶元素。结果处理 从堆中依次取出前 K 高的字符串存储到结果数组中。 最终返回存储前 K 高字符串的结果数组 ret。这样通过哈希表统计频率并使用优先队列来维护前 K 高的频率实现了找出频率前 K 高的字符串。 代码 class Solution {struct cmp{bool operator()(const pairstring,int a,const pairstring,int b){if(a.secondb.second) return a.firstb.first;return a.secondb.second;}}; public:vectorstring topKFrequent(vectorstring words, int k) {unordered_mapstring,int hash;for(string s:words) hash[s];priority_queuepairstring,int,vectorpairstring,int,cmp heap;for(const pairstring,int x:hash){heap.push(x);if(heap.size()k) heap.pop();}vectorstring ret(k);for(int ik-1;i0;--i){ret[i]heap.top().first;heap.pop();}return ret;} };04.数据流的中位数 题目链接https://leetcode.cn/problems/find-median-from-data-stream/ 中位数是有序整数列表中的中间值。如果列表的大小是偶数则没有中间值中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: MedianFinder() 初始化 MedianFinder 对象。void addNum(int num) 将数据流中的整数 num 添加到数据结构中。double findMedian() 返回到目前为止所有元素的中位数。与实际答案相差 10-5 以内的答案将被接受。 示例 1 输入 [MedianFinder, addNum, addNum, findMedian, addNum, findMedian] [[], [1], [2], [], [3], []] 输出 [null, null, null, 1.5, null, 2.0]解释 MedianFinder medianFinder new MedianFinder(); medianFinder.addNum(1); // arr [1] medianFinder.addNum(2); // arr [1, 2] medianFinder.findMedian(); // 返回 1.5 ((1 2) / 2) medianFinder.addNum(3); // arr[1, 2, 3] medianFinder.findMedian(); // return 2.0提示: -105 num 105在调用 findMedian 之前数据结构中至少有一个元素最多 5 * 104 次调用 addNum 和 findMedian 思路 这里我们最容易想到的暴力解法就是每次插入时排序但是这种方法时间复杂度太高其实这里我们可以使用一个大堆和一个小堆来维护所有数各分一半数据若两边长度相等则返回两个堆顶相加除2的值若不等返回大堆堆顶即可。 在构造函数中初始化两个优先队列left 用于存放较小的一半元素最大堆right 用于存放较大的一半元素最小堆。 在 addNum 方法中根据元素的大小选择将其插入到左堆或右堆。插入后需要保持两个堆的大小差不超过 1以确保中位数的计算。 在 findMedian 方法中根据两个堆的大小关系返回中位数。通过这种方式不断将数据插入到两个堆中并保持它们的大小差不超过 1就能够在 O(1) 时间内查找到当前数据流的中位数。 代码 class MedianFinder {priority_queueint left;priority_queueint,vectorint,greaterint right; public:MedianFinder() {}void addNum(int num) {if(left.size()right.size()){if(left.empty()||numleft.top()) left.push(num);else{right.push(num);left.push(right.top());right.pop();}}else{if(numleft.top()){left.push(num);right.push(left.top());left.pop();}else right.push(num);}}double findMedian() {if(left.size()right.size()) return (left.top()right.top())/2.0;return left.top();} };/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj new MedianFinder();* obj-addNum(num);* double param_2 obj-findMedian();*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站开发的主要特点网站维护与推广

在 Ubuntu 系统中,您可以通过几种方式来检查系统是否包含显卡,以及显卡的详细信息。以下是一些常用的方法: lspci 命令: 打开终端。输入 lspci | grep VGA 命令。这将显示系统中所有的 VGA 兼容设备,通常是您的显卡。 …

啥十小企业网站建设杭州网站推广方案平台

详情点击公众号:技术科研吧 链接:GPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用 一开启大模型 1 开启大模型 1)大模型的发展历程与最新功能 2)大模型的强大功能与应用场景 3)国内外经典大模型(ChatGPT、LLaMA、Gemini、DAL…

dedecms做的网站_网站中的图片总是被同一ip恶意点击哈尔滨网站开发公司电话

基于java的SSM框架实现停车场管理系统演示 摘要 以往的停车场管理事务处理主要使用的是传统的人工管理方式,这种管理方式存在着管理效率低、操作流程繁琐、保密性差等缺点,长期的人工管理模式会产生大量的文本车辆上报与文本数据,这对事务的…

做外贸用什么网站好创建一个网站的创业计划书

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

建设网站的费用明细神马收录提交入口

文章目录 cookie是什么Django中如何使用cookieCookie使用示例session是什么Django中如何使用会话sessionSession使用示例小结 HTTP协议本身是”无状态”的,在一次请求和下一次请求之间没有任何状态保持,服务器无法识别来自同一用户的连续请求。有了cooki…

戚墅堰常州做网站南安市住房和城乡建设局网站

Android 设备上的数据丢失可能是一种令人痛苦的经历,通常会导致不可替代的信息瞬间消失。 意外删除、系统崩溃或格式错误都可能发生,重要数据的丢失可能会扰乱日常工作并影响您的工作效率。 幸运的是,技术进步带来了多种恢复解决方案&…

企业搭建pc端网站苏州快速建设网站公司

文章信息 论文题目为《城轨线路列车时刻表与车站客流控制协同优化方法》,该文于2021年发表于《交通运输系统工程与信息》上。文章考虑换入客流影响下列车时刻表与客流控制的协同优化问题,以最小化乘车延误人数为目标,以列车时刻表、客流控制和…

咋做个人网站上海企业公示信息填报

摘要 本文使用2024年最新的ELA注意力机制改进YoloV8的Neck层,实现涨点!改进方式简单易用,涨点明显!欢迎大家使用。 大家在订阅专栏后,记着加QQ群啊!有些改进方法确实有难度,大家在改进的过程中遇到问题,我会解答和指导! 论文:《ELA:深度卷积神经网络的高效局部注意…

js做论坛网站单位做网站

在实际部署模型时有时可能会遇到想用的算子无法导出onnx,但实际部署的框架是支持该算子的。此时可以通过自定义onnx算子的方式导出onnx模型(注:自定义onnx算子导出onnx模型后是无法使用onnxruntime推理的)。下面给出个具体应用中的…

网站建设用的软件抚州南城网站建设

微信小程序底部想要有一个漂亮的导航栏目,不知道怎么制作,于是百度找到了本篇文章,分享给大家。 好了 小程序的头部标题 设置好了,我们来说说底部导航栏是如何实现的。 我们先来看个效果图 这里,我们添加了三个导航图标…

手机 pc网站模板想要去网站做友情链接怎么发邮件

7Z压缩是一款常用的压缩算法和工具,本文主要介绍一款在qt环境下进行编译的压缩方法。 本人测试是可以正常跑通的,具体代码部分请下载:下载链接,提取码:ev9t 7z源码网址:7-Zip 7z简介: 7z 是…

湖州童装网站网站的数据库选择

实验任务: 实现识别标识符的词法分析器 实验要求: 根据编译原理理论课教材中图2.3“标识符的转换图”,用C语言编写识别标识符的词法分析器,以文本文件为输入,控制台(或文件)输出识别出的每个…

什么网站发布任务有人做贵阳网站建设钟鼎网络

一、类组件和函数式组件的对比 Hook 的特性:在编写class 的情况下,使用state 以及其他React 特性(比如生命周期) 类组件相比于函数式组件的优势: 类组件可以定义自己的state,用来保存组件自己内部的状态…

网站建设石家庄市专业网络营销外包

文章目录 一. 程序三大执行流程二. 分支结构1.单分支结构(if)2.双分支结构(if..else)3.多分支结构(if..elif..else) 二,缩进(tab键)三,循环结构1.while循环2.for循环①遍历字典 五.break,continue和pass语句1.break,continue2.pass Python基础学习(1)基本…

如何制作公司网站网站怎样做百度推广计划

本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更,有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 建立一个基…

手机网站存储登录信息百度搜索名字排名优化

在今年 3 月,隐私公链 Partisia Blockchain 迎来了重要的进展,该生态通证 $MPC 上线了交易所,目前 $MPC 通证可以在 Kucoin、Gate、BitMart、Bitfinex、Bitture 等平台交易,并将在不久后上线 MEXC 平台。 ​ 在上个月上线市场至今…

做营销网站 如何让商家入驻ps做网站界面

一.概念介绍 1.1 gitlab-ci && 自动化部署工具的运行机制 以gitlab-ci为例: (1) 通过在项目根目录下配置.gitlab-ci.yml文件,可以控制ci流程的不同阶段,例如install/检查/编译/部署服务器。gitlab平台会扫描.gitlab-ci.yml文件&…

网站建设 三乐牙科医院网站源码

[单片机课程设计必看] 单片机设计报告常用描述 硬件设计 AT89C51最小系统 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS16位单片机,片内含4k bytes的可反复擦写的只读程序存储器和128 bytes的随机存取数据存储器,期间采用ATMEL公司的高…

营销型网站 案例phpcms v9网站上传

目录 常见的环境变量 HOME PWD SHELL HISTSIZE 环境变量相关的指令 echo&env export unset 本地变量 环境变量整体理解 程序现象_代码查看环境变量 整体理解 环境变量表 环境变量表的传递 环境变量表的查看 测试验证 少说废话🆗 每个用户…

html5 制作手机网站设计干货很多的网站

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速创新…