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

相关推荐
冰轮a6 分钟前
Python打卡 DAY 27
python
野曙33 分钟前
快速选择算法:优化大数据中的 Top-K 问题
大数据·数据结构·c++·算法·第k小·第k大
Codeking__1 小时前
”一维前缀和“算法原理及模板
数据结构·算法
休息一下接着来1 小时前
C++ 条件变量与线程通知机制:std::condition_variable
开发语言·c++·算法
Code哈哈笑1 小时前
【机器学习】支持向量回归(SVR)从入门到实战:原理、实现与优化指南
人工智能·算法·机器学习·回归·svm
拓端研究室TRL1 小时前
Python与MySQL网站排名数据分析及多层感知机MLP、机器学习优化策略和地理可视化应用|附AI智能体数据代码
人工智能·python·mysql·机器学习·数据分析
小哈里1 小时前
【pypi镜像源】使用devpi实现python镜像源代理(缓存加速,私有仓库,版本控制)
开发语言·python·缓存·镜像源·pypi
努力学习的小廉1 小时前
【C++】 —— 笔试刷题day_29
开发语言·c++·算法
小羊在奋斗1 小时前
【LeetCode 热题 100】搜索插入位置 / 搜索旋转排序数组 / 寻找旋转排序数组中的最小值
算法·leetcode·职场和发展
全栈派森1 小时前
云存储最佳实践
后端·python·程序人生·flask