博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Leetcode刷题篇】leetcode373 查找和最小的K对数字
阅读量:1889 次
发布时间:2019-04-26

本文共 1416 字,大约阅读时间需要 4 分钟。

给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k。

定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。
找到和最小的 k 对数字 (u1,v1), (u2,v2) … (uk,vk)。

示例 1:

输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3
输出: [1,2],[1,4],[1,6]
解释: 返回序列中的前 3 对数:
[1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6]

示例 2:

输入: nums1 = [1,1,2], nums2 = [1,2,3], k = 2
输出: [1,1],[1,1]
解释: 返回序列中的前 2 对数:
[1,1],[1,1],[1,2],[2,1],[1,2],[2,2],[1,3],[1,3],[2,3]

示例 3:

输入: nums1 = [1,2], nums2 = [3], k = 3
输出: [1,3],[2,3]
解释: 也可能序列中所有的数对都被返回:[1,3],[2,3]

题解思路:用优先级队列来存储数组,用大顶堆来解决该题

package com.lcz.leetcode;/** * 查找和最小的K对数字 * @author LvChaoZhang * */import java.util.*;public class Leetcode373 {
class Solution{
public List
> kSmallestPairs(int[] nums1,int[] nums2,int k){
// 存放结果 ArrayList
> res = new ArrayList<>(); // 大顶堆优先队列来解决问题 PriorityQueue
queue = new PriorityQueue<>(k,((a,b)->compare(a,b))); // 构建topK for(int i:nums1) {
for(int j:nums2) {
int[] arr = new int[] {
i,j}; if(k>queue.size()) {
queue.offer(arr); }else if(compare(arr,queue.peek())>0) {
queue.poll(); queue.offer(arr); } } } while(!queue.isEmpty()) {
int[] poll = queue.poll(); res.add(0,Arrays.asList(poll[0],poll[1])); } return res; } // 定义比较 private int compare(int[] arr1,int[] arr2) {
return (arr2[0]+arr2[1])-(arr1[0]+arr1[1]); } }}

转载地址:http://kzwdf.baihongyu.com/

你可能感兴趣的文章
CSS系列(6) CSS通配符详解
查看>>
Git Shell Warning
查看>>
课程总结
查看>>
新产品为了效果,做的比較炫,用了非常多的图片和JS,所曾经端的性能是非常大的问题,分篇记录前端性能优化的一些小经验。...
查看>>
访问修饰符和构造函数
查看>>
单例模式浅析
查看>>
小程序之map地图上不能在覆盖层
查看>>
L2-001 紧急救援
查看>>
修改敏感字
查看>>
Git reset到某一次commit
查看>>
荣品i.mx6q飞思卡尔工业级核心板开发板高稳定性
查看>>
web api 跨域请求
查看>>
基于注解的AOP配置
查看>>
SVN实现自动更新(Windows平台)
查看>>
SQL如何取日期中的年月
查看>>
C# goto
查看>>
Confluence 6 给一个从 Jira Service Desk 的非许可证用户访问权限
查看>>
node.js基础 1之简单的nodejs模块
查看>>
Cocos2d-x学习笔记(一) 搭建开发环境
查看>>
关于 古人劝学 --写的真心是好 真的有收获
查看>>