力扣 373:有序数组最小K数对的暴力与优化双解

发布时间:2026/7/26 21:44:58

力扣 373:有序数组最小K数对的暴力与优化双解
力扣 373有序数组最小K数对的暴力与优化双解 前言算法千般道有序为捷径Bilibili 同步视频 一、题意剖释明解题之本晓边界之规1.1 原题题意1.2 解题前置心法为何选用大顶堆 二、暴力枚举解法直白可行却逢时限之困2.1 算法思路Plain Text原理示意图2.2 完整C暴力源码2.3 致命缺陷与超时根源⚡ 三、有序特性优化顺势而为斩断无效遍历3.1 优化核心原理Plain Text分步图解3.2 优化前后性能直观对比3.3 完整版优化C代码可直接AC通过3.4 关键代码逐行注解 四、算法求学悟道万般阻碍皆为成长土壤 全文骈文速记口诀一键吃透本题 文末总结 前言算法千般道有序为捷径数组分列有序成行数对相依和值分章。刷题千万误区暗藏枚举全域虽稳难免超时之殇善用序列天性方可破壁图强。本篇以双有序数组寻找和最小K个数对为核心骈文行文、对仗释理逐层拆解暴力大顶堆解法、超时根源、有序特性极致优化方案附完整可运行C源码、分步原理图、性能对照分析由表及里由愚至巧吃透堆排序有序数组双重算法核心✨。Bilibili 同步视频力扣 373有序数组最小K数对的暴力与优化双解 一、题意剖释明解题之本晓边界之规1.1 原题题意给定两个升序排列的整数数组 nums1、nums2从两数组中分别取出一个元素组成数对要求返回所有数对中和值最小的前K个数对。约束核心元素一一配对一数取自nums1一数取自nums2数组全程升序元素从左至右单调递增输出结果无需再次排序保留堆筛选后的有效数对即可1.2 解题前置心法为何选用大顶堆求前K小堆分两类小顶堆逐次弹出最小值冗余遍历开销居高不下大顶堆留存备选集合堆顶为当前备选最大值超限则剔除大数留小去大适配本题最优场景✅。核心逻辑维护容量为K的大顶堆始终保留当前最小的K组数对新数对小于堆顶则入堆大于堆顶直接舍弃。 二、暴力枚举解法直白可行却逢时限之困2.1 算法思路Plain Text原理示意图【暴力枚举流程】 nums1: [1,2,4] nums2: [1,3,5] 全量两两枚举 → 生成全部9组数对 全部入大顶堆 → 堆容量超过K → 弹出堆顶最大值 最终剩余K组最小数对 缺陷无视数组有序性无脑全遍历数据量大直接TLE2.2 完整C暴力源码#includeiostream#includevector#includequeueusingnamespacestd;// 自定义比较器构建大顶堆按照数对之和降序排列structcmp{booloperator()(vectorinta,vectorintb){returna[0]a[1]b[0]b[1];}};vectorvectorintkSmallestPairs(vectorintnums1,vectorintnums2,intk){// 定义大顶堆priority_queuevectorint,vectorvectorint,cmpmaxHeap;// 双层循环无脑枚举所有数对for(intx:nums1){for(inty:nums2){maxHeap.push({x,y});// 堆容量超出K弹出当前最大数对if(maxHeap.size()k){maxHeap.pop();}}}// 导出结果vectorvectorintres;while(!maxHeap.empty()){res.push_back(maxHeap.top());maxHeap.pop();}returnres;}intmain(){vectorintn1{1,2,4};vectorintn2{1,3,5};autoanskSmallestPairs(n1,n2,3);for(autoitem:ans){coutitem[0] item[1]endl;}return0;}2.3 致命缺陷与超时根源双循环嵌套全域遍历所有组合时间复杂度高达O(N*M)。两数组皆为升序序列代码完全舍弃有序天性后续递增数对无需校验依旧强行入堆无效计算堆砌大数据场景直接触发TLE超时错误。痛点总结算法切忌蛮力遍历无视题干特性直白代码终究难抗大数据评测用例。⚡ 三、有序特性优化顺势而为斩断无效遍历3.1 优化核心原理Plain Text分步图解【有序数组优化逻辑】 已知nums1、nums2 全局升序 固定 nums1 中元素 x向后遍历 nums2 nums2 元素y持续变大 → xy 和值持续单调递增 判定规则 1. 堆未满k个直接入堆无需判断 2. 堆已满k个当前和 堆顶和 → 替换堆顶 3. 当前和 ≥ 堆顶和 → 后续所有和只会更大 → 直接break终止内层循环 核心依托单调性提前截断循环消灭全部无效遍历3.2 优化前后性能直观对比解法类型时间复杂度运行耗时是否超时暴力全枚举O(N*M)130ms是有序截断优化O(N*K)12ms左右否3.3 完整版优化C代码可直接AC通过#includeiostream#includevector#includequeueusingnamespacestd;structcmp{booloperator()(vectorinta,vectorintb){returna[0]a[1]b[0]b[1];}};vectorvectorintkSmallestPairs(vectorintnums1,vectorintnums2,intk){priority_queuevectorint,vectorvectorint,cmpmaxHeap;for(intx:nums1){for(inty:nums2){intcurSumxy;// 分支1堆内元素不足k直接存入if(maxHeap.size()k){maxHeap.push({x,y});}else{// 分支2堆已满当前数对更小则替换堆顶if(curSummaxHeap.top()[0]maxHeap.top()[1]){maxHeap.pop();maxHeap.push({x,y});}else{// 依托升序单调性后续和值只会更大直接截断内层循环break;}}}}vectorvectorintres;while(!maxHeap.empty()){res.push_back(maxHeap.top());maxHeap.pop();}returnres;}intmain(){vectorintn1{1,2,4};vectorintn2{1,3,5};autoanskSmallestPairs(n1,n2,3);for(autoitem:ans){coutitem[0]item[1]item[0]item[1]endl;}return0;}3.4 关键代码逐行注解堆容量判断前置优先判断堆空间未满直接存入省去多余比较开销break截断核心内层循环一旦命中大于等于堆顶立刻终止本轮nums2遍历杜绝无效循环比较器无需深究数组比较依据为元素之和底层语法实现属于语言细节无需纠结底层重载逻辑聚焦算法思维即可 四、算法求学悟道万般阻碍皆为成长土壤刷题之路荆棘相伴代码之途苦练为岸。常有学子观他人代码行云流水自敲代码寸步难行妄图跳过实操一步登天此乃虚妄之念。天下代码无捷径可走一身功力唯苦练可成。天赋分高下努力无偏颇付出几分耕耘便得几分收获。遇难题而退缩困当下之桎梏迎难题而攻坚铺来日之坦途。譬如种子埋于泥土泥土一时为阻隔压制破土锋芒待到嫩芽而出泥土便为根基托举枝干生长。当下算法之难、代码之苦皆是脚下土壤今日熬过万般阻碍来日便可傲视群雄自成锋芒✨。 全文骈文速记口诀一键吃透本题双序数组寻小数大顶堆存备选组暴力双层全遍历无视序列超时苦升序单调和递增遇大截断少往复算法巧用题干性少算一步快一步刷题不惧当下苦困境终成脚下土。 文末总结本题看似是堆结构基础应用题实则考察算法优化思维优秀的代码从不是无脑模拟流程而是读懂题干隐藏条件顺势简化计算。暴力解法保正确率优化解法保运行效率二者结合方能兼顾逻辑与性能。 评论区交流你刷题时是否也经常无脑遍历忽略数组有序特性欢迎留言讨论#算法 #C #大顶堆 #数组算法 #LeetCode刷题 #代码优化

相关新闻

Desktop-Cube多显示器设置指南:解决X11与Wayland下的视角问题

Desktop-Cube多显示器设置指南:解决X11与Wayland下的视角问题

2026/7/26 21:44:58

Desktop-Cube多显示器设置指南:解决X11与Wayland下的视角问题 【免费下载链接】Desktop-Cube 🧊 Indulge in nostalgia with useless 3D effects. 项目地址: https://gitcode.com/gh_mirrors/de/Desktop-Cube Desktop-Cube是一款能为Linux桌面环境…

序列化陷阱:Protobuf与gRPC版本兼容性问题调试指南

序列化陷阱:Protobuf与gRPC版本兼容性问题调试指南

2026/7/26 21:44:58

序列化问题的隐蔽性:一个Kafka反序列化失败案例 在微服务架构中,服务之间通过序列化协议交换数据。看似无关紧要的字段添加、枚举值变更,可能在生产环境中引发静默故障。考虑这样一个场景:订单服务向Kafka的orders.created主题发布事件,而履约服务消费该事件并将订单存入…

免费开源眼动追踪:如何用计算机视觉技术实现精准视线控制

免费开源眼动追踪:如何用计算机视觉技术实现精准视线控制

2026/7/26 21:34:58

免费开源眼动追踪:如何用计算机视觉技术实现精准视线控制 【免费下载链接】eyetracker Take images of an eyereflections and find on-screen gaze points. 项目地址: https://gitcode.com/gh_mirrors/ey/eyetracker 你想过用眼睛控制电脑吗?eye…

Unity游戏暂停功能:事件广播机制实现与最佳实践

Unity游戏暂停功能:事件广播机制实现与最佳实践

2026/7/26 22:45:01

1. 项目概述:为什么事件广播是暂停功能的最佳拍档?在Unity游戏开发里,实现游戏暂停(Pause)功能,几乎是每个项目都会遇到的“必修课”。新手最常见的做法,可能是在一个全局的GameManager脚本里&a…

Three.js 围栏着色器教程

Three.js 围栏着色器教程

2026/7/26 22:45:01

围栏着色器 Fence Shader ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 ShaderMaterial 自…

UE5像素流送技术:从原理到部署,实现云端实时渲染应用分发

UE5像素流送技术:从原理到部署,实现云端实时渲染应用分发

2026/7/26 22:45:01

1. 项目概述:为什么像素流送是UE5应用分发的新范式?最近在折腾一个UE5的演示项目,想把一个接近10个G、包含高精度模型和复杂交互的虚拟展厅,让客户在手机、平板甚至低配电脑上都能流畅体验。直接打包分发?光是下载安装…

3步拯救你的B站缓存视频:m4s-converter让珍贵内容永不消失

3步拯救你的B站缓存视频:m4s-converter让珍贵内容永不消失

2026/7/26 22:45:01

3步拯救你的B站缓存视频:m4s-converter让珍贵内容永不消失 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的情…

P1530 分数化小数 Fractions to Decimals【洛谷算法习题】

P1530 分数化小数 Fractions to Decimals【洛谷算法习题】

2026/7/26 22:45:01

P1530 分数化小数 Fractions to Decimals 网页链接 P1530 分数化小数 Fractions to Decimals 题目描述 写一个程序,输入一个形如 ND\dfrac{N}{D}DN​ 的分数,输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。 例如&…

41-DataviewJS-JavaScript高级查询

41-DataviewJS-JavaScript高级查询

2026/7/26 22:35:00

41 DataviewJS:JavaScript高级查询 从一个看板说起 去年夏天,前端开发者小林接手了一个内部工具项目——团队需要用Obsidian管理多个并行开发任务的进度。最初他用Dataview的DQL查询做了几个表格,但很快发现需求越来越复杂:需要根据任务状态自动变色、需要点击按钮快速变…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…