博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Leetcode刷题篇】leetcode373 查找和最小的K对数字
阅读量:1887 次
发布时间: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/

你可能感兴趣的文章
Django项目实战----添加支付宝支付
查看>>
DRF框架---前言(简单使用)
查看>>
字符串外面是b“ “的转换 -亲测有效
查看>>
npy文件和pkl文件的保存和读取
查看>>
Kafka为什么这么快?
查看>>
Java 生产者和消费者面试题
查看>>
本机电脑连接虚拟机redis失败解决方法
查看>>
tomcat配置JVM
查看>>
【Scala 教程】Scala 集合类型
查看>>
JAVA 线程同步机制 synchronized
查看>>
MySQL 安装教程(无脑版)
查看>>
IDEA 怎么删除一个Module
查看>>
走进数据科学:最好是通过比网课更好的方法
查看>>
【Python爬虫实战】知乎热榜数据采集,上班工作摸鱼两不误,知乎热门信息一网打尽
查看>>
10种算法一文打尽!基本图表算法的视觉化阐释
查看>>
未来属于人工智能工程师,但成功转型不容易
查看>>
科技界“挠头”:困扰科技界可持续发展的难题
查看>>
标准出现问题,人工智能正在走向错误的方向
查看>>
不论何时,互联网从业者一直幸福着~
查看>>
架构师知识体系全景图
查看>>