当前位置: 首页 > ops >正文

LeetCode 373 查找和最小的 K 对数字题解

LeetCode 373 查找和最小的 K 对数字题解

题目描述

给定两个以升序排列的整数数组 nums1 和 nums2,以及一个整数 k。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。请找到和最小的 k 个数对。

解题思路

最小堆优化法

  1. 初始候选集:将nums1每个元素与nums2第一个元素组合
  2. 堆维护:使用最小堆动态维护候选对
  3. 结果收集:每次取出堆顶元素后补充新的候选对

核心逻辑

  1. 堆元素结构:(sum, i, j) 存储当前和、nums1索引、nums2索引
  2. 避免重复:通过索引递增保证每个组合只处理一次
  3. 提前终止:当收集够k个结果或堆为空时停止

复杂度分析

操作时间复杂度空间复杂度
堆初始化O(klogk)O(k)
堆弹出/压入O(klogk)O(k)
总复杂度O(klogk)O(k)

测试用例

常规测试

输入:

nums1 = [1,7,11]
nums2 = [2,4,6] 
k = 3```python
# LeetCode 373 查找和最小的 K 对数字
# https://leetcode.cn/problems/find-k-pairs-with-smallest-sums/description/import heapq
from typing import Listclass Solution:def kSmallestPairs(self, nums1: List[int], nums2: List[int], k: int) -> List[List[int]]:"""解法:最小堆 + 双指针时间复杂度:O(klogk)空间复杂度:O(k)"""if not nums1 or not nums2:return []heap = []# 初始化堆:将nums1中每个元素与nums2第一个元素组合for i in range(min(len(nums1), k)):heapq.heappush(heap, (nums1[i] + nums2[0], i, 0))result = []while heap and len(result) < k:# 取出当前最小和的组合val, i, j = heapq.heappop(heap)result.append([nums1[i], nums2[j]])# 将nums2的下一个元素加入堆(如果存在)if j + 1 < len(nums2):heapq.heappush(heap, (nums1[i] + nums2[j+1], i, j+1))return resultif __name__ == "__main__":# 测试用例test1 = Solution().kSmallestPairs([1,7,11], [2,4,6], 3)  # [[1,2],[1,4],[1,6]]test2 = Solution().kSmallestPairs([1,1,2], [1,2,3], 2)   # [[1,1],[1,1]]
http://www.xdnf.cn/news/5609.html

相关文章:

  • Git安装教程及常用命令
  • 【DeepSeek问答记录】请结合实例,讲解一下pytorch的DataLoader的使用方法
  • 11 配置Hadoop集群-免密登录
  • 一文读懂如何使用MCP创建服务器
  • ARMV8 RK3399 u-boot TPL启动流程分析 --crt0.S
  • 恰到好处TDR
  • SID310S/D/Q-10MHz, 低噪声, 轨至轨, CMOS 运算放大器
  • 二叉树路径总和
  • 10:00开始面试,10:08就出来了,问的问题有点变态。。。
  • wordcount在mapreduce的例子
  • 解读RTOS:第二篇 · 线程/任务管理与调度策略
  • WebGIS开发新突破:揭秘未来地理信息系统的神秘面纱
  • 回答 | 图形数据库neo4j社区版可以应用小型企业嘛?
  • 宇树科技安全漏洞揭示智能机器人行业隐忧
  • 视频翻译软件有哪些?推荐5款视频翻译工具[特殊字符][特殊字符]
  • 树莓派4 yolo 11l.pt性能优化后的版本
  • 摆脱拖延症的详细计划示例
  • Java根据文件名前缀自动分组图片文件
  • 社交APP如何借助游戏盾守护业务稳定
  • 配置Hadoop集群环境-使用脚本命令实现集群文件同步
  • React Native踩坑实录:解决NativeBase Radio组件在Android上的兼容性问题
  • Babel进阶:如何自定义插件?
  • 如何使用Launch4J将我们jar包变成一个可执行文件exe(依赖解压的jdk)
  • 常用的设计模式详解
  • BUUCTF 大流量分析(二) 1
  • Pycharm中No Conda enviroment selected
  • o.redisson.client.handler.CommandsQueue : Exception occured. Channel
  • 判断一个数是不是素数的最高效的算法
  • 在Fortran中输出类似Markdown的表格
  • Python Day23 学习