欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 查找和最小的K对数字(LeetCode)

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

2024/10/24 11:18:41 来源:https://blog.csdn.net/weixin_74254879/article/details/140898889  浏览:    关键词:查找和最小的K对数字(LeetCode)

题目

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

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

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

解题

from heapq import heappush, heappopdef 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 -= 1return 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)]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com