查找和最小的K对数字(LeetCode)

题目

给定两个以 非递减顺序排列 的整数数组 nums1nums2, 以及一个整数 k

定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2

请找到和最小的 k 个数对 (u1,v1), (u2,v2) ... (uk,vk)

解题

python 复制代码
from heapq import heappush, heappop


def k_smallest_pairs(nums1, nums2, k):
    # 存储结果的列表
    result = []

    # 边界条件
    if not nums1 or not nums2:
        return result

    # 使用最小堆
    min_heap = []

    # 初始化最小堆,存储 (和, nums1中的索引, nums2中的索引)
    for i in range(min(len(nums1), k)):  # 只需要前 k 个元素进行初始化
        heappush(min_heap, (nums1[i] + nums2[0], i, 0))

    while k > 0 and min_heap:
        current_sum, i, j = heappop(min_heap)
        result.append((nums1[i], nums2[j]))

        # 如果还有下一个元素,则将下一个元素的对加到堆中
        if j + 1 < len(nums2):
            next_sum = nums1[i] + nums2[j + 1]
            heappush(min_heap, (next_sum, i, j + 1))

        k -= 1

    return result


# 测试代码
nums1 = [1, 7]
nums2 = [3, 4]
k = 3
print(f"和最小的{k}个数对 : {k_smallest_pairs(nums1, nums2, k)}")

和最小的3个数对 : [(1, 3), (1, 4), (7, 3)]

相关推荐
冬天vs不冷5 分钟前
Java基础(九):Object核心类深度剖析
java·开发语言·python
TS的美梦6 分钟前
【1:1复刻R版】python版火山图函数一键出图
开发语言·python·r语言·scanpy·火山图
CF14年老兵17 分钟前
Python万物皆对象:从懵懂到顿悟的奇妙之旅
后端·python·trae
这里有鱼汤20 分钟前
发现个用《道德经》+价值投资大咖的智慧,做A股的AI诊股神器,居然还开源了
python
墩墩同学1 小时前
【LeetCode题解】LeetCode 74. 搜索二维矩阵
算法·leetcode·二分查找
陈天伟教授1 小时前
(二)Python + 地球信息科学与技术 (GeoICT)=?
开发语言·python
SunnyKriSmile1 小时前
输入10个数并求最大值
c语言·算法
汤永红1 小时前
week2-[循环嵌套]数位和为m倍数的数
c++·算法·信睡奥赛
之歆1 小时前
大模型微调分布式训练-大模型压缩训练(知识蒸馏)-大模型推理部署(分布式推理与量化部署)-大模型评估测试(OpenCompass)
人工智能·笔记·python
人工干智能2 小时前
pygame的帧处理中,涉及键盘的有`pg.event.get()`与`pg.key.get_pressed()` ,二者有什么区别与联系?
python·游戏·计算机外设·pygame