查找和最小的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)]

相关推荐
晓风残月淡30 分钟前
JVM字节码与类的加载(二):类加载器
jvm·python·php
西柚小萌新3 小时前
【深入浅出PyTorch】--上采样+下采样
人工智能·pytorch·python
未来之窗软件服务4 小时前
自己写算法(九)网页数字动画函数——东方仙盟化神期
前端·javascript·算法·仙盟创梦ide·东方仙盟·东方仙盟算法
豐儀麟阁贵4 小时前
基本数据类型
java·算法
shut up5 小时前
LangChain - 如何使用阿里云百炼平台的Qwen-plus模型构建一个桌面文件查询AI助手 - 超详细
人工智能·python·langchain·智能体
宝贝儿好6 小时前
【python】第五章:python-GUI编程
python·pyqt
乐迪信息6 小时前
乐迪信息:基于AI算法的煤矿作业人员安全规范智能监测与预警系统
大数据·人工智能·算法·安全·视觉检测·推荐算法
闲人编程6 小时前
从多个数据源(CSV, Excel, SQL)自动整合数据
python·mysql·数据分析·csv·存储·数据源·codecapsule
hsjkdhs6 小时前
C++之多层继承、多源继承、菱形继承
开发语言·c++·算法
B站_计算机毕业设计之家6 小时前
推荐系统实战:python新能源汽车智能推荐(两种协同过滤+Django 全栈项目 源码)计算机专业✅
大数据·python·django·汽车·推荐系统·新能源·新能源汽车