算法-堆/多路归并-查找和最小的 K 对数字

news2024/11/15 6:33:21

算法-堆/多路归并-查找和最小的 K 对数字

1 题目概述

1.1 题目出处

https://leetcode.cn/problems/find-k-pairs-with-smallest-sums/description/?envType=study-plan-v2&envId=top-interview-150

1.2 题目描述

在这里插入图片描述

2 优先级队列构建大顶堆

2.1 思路

将两个数字的和放入大顶堆中,堆的最大大小为k。

当堆大小小于k时,直接放里面放。
当堆大小达到k后,比较当前元素和堆顶的元素,如果比堆顶元素小,就移除堆顶元素并放入当前元素。

最后,堆内元素就是和最小的K对数。

2.2 代码

class Solution {
    List<List<Integer>> resultList = new LinkedList<>();
    

    public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {
        // 大顶堆
        PriorityQueue<List<Integer>> queue = new PriorityQueue<>((o1, o2)->o2.get(0) + o2.get(1) - o1.get(0) - o1.get(1));
        for (int i = 0; i < Math.min(nums1.length, k); i++) {
            for (int j = 0; j < Math.min(nums2.length, k); j++) {
                int sum = nums1[i] + nums2[j];
                if (queue.size() < k) {
                    List<Integer> pair = new ArrayList<>();
                    pair.add(nums1[i]);
                    pair.add(nums2[j]);
                    queue.add(pair);
                } else {
                    List<Integer> headPair = queue.peek();
                    int headSum = headPair.get(0) + headPair.get(1);
                    if (sum < headSum) {
                        queue.poll();
                        List<Integer> pair = new ArrayList<>();
                        pair.add(nums1[i]);
                        pair.add(nums2[j]);
                        queue.add(pair);
                    }
                }
            }
        }
        while (queue.size() > 0) {
            resultList.add(queue.poll());
        }
        return resultList;
    }
}

2.3 时间复杂度

O(Math.min(nums1.length, k) * Math.min(nums2.length, k))
在这里插入图片描述
悲催啊,超时了

2.4 空间复杂度

O(K)

3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同一台电脑下的wireshark的http抓包查看使用的接口

开发过程中写软件开发设计时需要写调用的接口&#xff0c; 可以使用抓包软件 操作一遍&#xff0c;看抓包记录 然后看自己需要的接口调用情况 同一台电脑用这个 设置需要的抓包协议 在后台搜索关键词也可以看到用了哪些接口 Json查看器也可以查看接口信息

Vue+element开发Simple Admin后端管理系统页面

最近看到各种admin&#xff0c;头大&#xff0c;内容太多&#xff0c;根本不知道怎么改。所以制作了这个项目&#xff0c;只包含框架、和开发中最常用的表格和表单&#xff0c;不用自己从头搭建架构&#xff0c;同时也容易上手二次开发。可以轻松从其他开源项目整合到本项目。项…

避障技术再提升,扫地机器人避障不止于精准

扫地机器人好用与否&#xff0c;避障表现首当其冲&#xff0c;那么评判避障好坏的标准又是什么&#xff1f; 有效避障仅是第一步 时至今日&#xff0c;可以说仍有相当一部分人对于扫地机器人的印象停留在人工“智障”上&#xff0c;由于早期的产品基本不具备避障能力&#xf…

ArcGIS 10.7软件安装包下载及安装教程!

【软件名称】&#xff1a;ArcGIS 10.7 【安装环境】&#xff1a;Windows 【下载链接 】&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1IwsPubYWGHd9ztmn45QLJA 提取码&#xff1a;1oeq 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 软件简介 ArcGIS…

ubuntu16编译linux源码内核

一、环境准备 1.1、安装虚拟机ubuntu16 编译内核大概需要20G的磁盘空间&#xff0c;所以硬盘大小尽量大于40G网络适配使用桥接 1.1.1、查看当前内核版本 uname -r1.2、安装samba服务 Samba 是一款数据共享的软件&#xff0c;可用于 Ubuntu 与 Windows 之间共享源代码&#…

Flink容错机制

容错机制 在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 检查点的保存 1&#xff09;周期性的触发保存 “随时存档”确实恢复起来方便&#xff0c;可是需要我们不停地做存档操作。如果每处理一条数据就进行检查点的保存…

IP地址分配的原则:确保网络有效性和可管理性

IP地址是互联网通信的关键基础&#xff0c;它们用于标识和定位设备在网络上的位置。为了确保网络的有效性和可管理性&#xff0c;IP地址分配IP66_ip归属地在线查询_免费ip查询_ip精准定位平台需要遵循一定的原则和准则。本文将介绍IP地址分配的原则&#xff0c;以帮助网络管理员…

Java当中的BIO模型

我们知道Java中的IO模型分为BIO和NIO模型&#xff0c;BIO是BlCKING IO的简称而NIO当中的N有两层意思&#xff0c;一个是从java1.4开始出现的NEW IO&#xff0c;今天我们来聊一聊为什么传统的BIO会慢以及它并不适合大量的连接&#xff0c;我们先来看一段简单的代码&#xff0c;这…

unity生成模型预览图并导出图片

1、首先将模型打成预制体.prefab对象 2、放入指定文件夹 3、打开工具 4、不好使就多点一次 这样就会批量生成预制体图片了 Demo参见&#xff1a; GetbadEarlyup/unityPicDemo: 在unity中生成可导出缩略图的Demo工程 (github.com)https://github.com/GetbadEarlyup/unityPicDe…

天津口碑web前端培训机构 Web前端能干一辈子吗?

近年来&#xff0c;前端开发领域的就业市场呈现出蓬勃发展的态势。越来越多的公司和组织意识到用户体验的重要性&#xff0c;因此对前端开发人员的需求也随之增加。 学前端还是学后端 随着互联网的发展&#xff0c;前端和后端技术在招聘市场上都有很大的需求。学前端可以成为…

紧固螺栓的常见类型有哪些?

大螺丝、小螺丝 螺丝有各种各样的叫法。螺丝、小螺丝、螺栓、鋲螺、螺杆、螺子、小螺钉等。螺丝的大小、以现代的技术细的可以加工到1毫米以下。例如用于手表、计算机、手机等螺丝能加工到0.5毫米。粗的螺丝一般使用到50毫米&#xff0c;主要用于建筑、桥梁等。根据需要可加工…

【VUE复习·4】计算属性computed:原理、完整写法(不常用)、与 methods 的区别、简写(最常用)、应用案例!

总览 1.简介计算属性 2.computed 与 methods 的区别 3.computed 的简写&#xff08;不修改计算属性&#xff0c;只显示&#xff09; 4.经典应用场景 一、计算属性 1.为什么需要计算属性&#xff1f; 首先&#xff0c;如果我们要写一个插值语法&#xff0c;而 {{ }} 内的内容…

微信小程序 block 标签

今天在小程序开发中发现项目中出现了一个 block 作为一个小程序经验并不是特别多的我 显然触及到新大陆了 于是问了AI 在小程序中&#xff0c;block 元素用于包裹一组节点&#xff0c;类似于一个容器。它的作用是可以在页面中创建一个独立的作用域&#xff0c;方便对这组节点…

高光时刻丨极智嘉斩获2023中国物流与采购联合会科学技术一等奖

不久前&#xff0c;中国物流与采购联合会宣布了2022年度科学技术奖获奖名单&#xff0c;其中包括了一项令人瞩目的成就。这项成就源自于极智嘉与国药物流、南京医药、九州通医药以及多所高校的合作&#xff0c;他们共同努力&#xff0c;成功研究并应用了一项关键技术&#xff0…

上海再发区块链专项方案 和数集团欲打造新一代Web3.0创新生态

9月27日消息&#xff0c;上海市科学技术委员会印发《上海区块链关键技术攻关专项行动方案&#xff08;2023-2025年&#xff09;》的通知。 《行动方案》指出&#xff0c;专项行动要为上海市级区块链基础服务平台建设以及政务、跨境贸易、供应链、金融、元宇宙、数据要素流通等…

HTML5语义化标签解释说明

语义化&#xff1a;在HTML5中提供了一些&#xff0c;具备语义化的标签&#xff01;他们通常用于去构造网页的各个部分&#xff01; HTML5之前网页的组成和布局通常是使用p和SPAN来构建和布局整个网页的&#xff0c;这样做是常见的做法&#xff0c;但存在一个问题&#xff0c;以…

用户画像浅析

这篇文章主要和大家分享对于用户画像的认识&#xff0c;包括如何理解用户画像&#xff0c;为什么需要用户用画像&#xff0c;以及在建设和应用用户画像过程中总结的方法论&#xff0c;让大家了解如何构建好的用户画像。 1、用户画像定义 用户画像是根据用户社会属性、生活习惯…

采集SEO方法-添加关键词

采集大量的文章数据&#xff0c;要想批量做SEO添加关键词方法&#xff0c;可以使用简数采集器的处理规则实现。 添加关键词的SEO技巧&#xff1a; 1&#xff09;注意关键词的密度和分布&#xff0c;不要过度堆砌或重复添加关键词&#xff1b; 2&#xff09;分析需求和搜索习…

基于微信小程序的奶茶点餐小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

Stm32_标准库_GPIOA初始化

代码&#xff1a; #include "stm32f10x.h" // Device headerGPIO_InitTypeDef GPIO_InitStructur;//定义变量结构体int main(void){/*使用RCC开启GPIO的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA端口时钟/*使用GPIO_I…