LeetCode-632. Smallest Range Covering Elements from K Lists [C++][Java]

目录

题目描述

解题思路

【C++】

【Java】


LeetCode-632. Smallest Range Covering Elements from K Listsicon-default.png?t=O83Ahttps://leetcode.com/problems/smallest-range-covering-elements-from-k-lists/description/

题目描述

You have k lists of sorted integers in non-decreasing order. Find the smallest range that includes at least one number from each of the k lists.

We define the range [a, b] is smaller than range [c, d] if b - a < d - c or a < c if b - a == d - c.

Example 1:

Input: nums = [[4,10,15,24,26],[0,9,12,20],[5,18,22,30]]
Output: [20,24]
Explanation: 
List 1: [4, 10, 15, 24,26], 24 is in range [20,24].
List 2: [0, 9, 12, 20], 20 is in range [20,24].
List 3: [5, 18, 22, 30], 22 is in range [20,24].

Example 2:

Input: nums = [[1,2,3],[1,2,3],[1,2,3]]
Output: [1,1]

Constraints:

  • nums.length == k
  • 1 <= k <= 3500
  • 1 <= nums[i].length <= 50
  • -105 <= nums[i][j] <= 105
  • nums[i] is sorted in non-decreasing order.

解题思路

【C++】

class Solution {
public:vector<int> smallestRange(vector<vector<int>>& nums) {int n = nums.size(), xmin = INT_MAX, xmax = INT_MIN;unordered_map<int, vector<int>> indices;for (int i = 0; i < n; i++) {for (const int& num : nums[i]) {indices[num].push_back(i);xmin = min(xmin, num);xmax = max(xmax, num);}}vector<int> freq(n);int in = 0, l = xmin, r = xmin - 1, ansL = xmin, ansR = xmax;while (r < xmax) {if (!indices.count(++r)) {continue;}for (const int& i : indices[r]) {++freq[i];if (freq[i] == 1) {++in;}}while (in == n) {if (r - l < ansR - ansL) {ansR = r;ansL = l;}if (indices.count(l)) {for (const int& i : indices[l]) {--freq[i];if (freq[i] == 0) {--in;}}}++l;}}return {ansL, ansR};}
};

【Java】

class Solution {public int[] smallestRange(List<List<Integer>> nums) {int n = nums.size(), xmin = Integer.MAX_VALUE, xmax = Integer.MIN_VALUE;Map<Integer, List<Integer>> indices = new HashMap<Integer, List<Integer>>();for (int i = 0; i < n; i++) {for (int num : nums.get(i)) {List list = indices.getOrDefault(num, new ArrayList<Integer>());list.add(i);indices.put(num, list);xmin = Math.min(xmin, num);xmax = Math.max(xmax, num);}}int[] freq = new int[n];int in = 0, l = xmin, r = xmin - 1, ansL = xmin, ansR = xmax;while (r < xmax) {if (!indices.containsKey(++r)) {continue;}for (int i : indices.get(r)) {++freq[i];if (freq[i] == 1) {++in;}}while (in == n) {if (r - l < ansR - ansL) {ansR = r;ansL = l;}if (indices.containsKey(l)) {for (int i : indices.get(l)) {--freq[i];if (freq[i] == 0) {--in;}}}++l;}}return new int[]{ansL, ansR};}
}

复杂度分析

时间复杂度:O(nk+∣V∣),其中 n 是所有列表的平均长度,k 是列表数量,∣V∣ 是列表中元素的值域,在本题中 ∣V∣≤2∗10^5。构造哈希映射的时间复杂度为 O(nk),双指针的移动范围为 ∣V∣,在此过程中会对哈希映射再进行一次遍历,时间复杂度为 O(nk),因此总时间复杂度为 O(nk+∣V∣)。

空间复杂度:O(nk),即为哈希映射使用的空间。哈希映射的「键」的数量由列表中的元素个数 nk 以及值域 ∣V∣ 中的较小值决定,「值」为长度不固定的数组,但是它们的长度之和为 nk,因此哈希映射使用的空间为 O(nk)。在使用双指针时,还需要一个长度为 n 的数组,其对应的空间在渐进意义下小于 O(nk),因此可以忽略。

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

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

相关文章

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM&#xff1f; POM是PageObjectModule&#xff08;页面对象模式&#xff09;的缩写&#xff0c;其目的是为了Web UI测试创建对象库。在这种模式下&#xff0c;应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

单片机(STM32)开发中常用的C语言基础语法(二)

9、goto语句与标签 goto语句用于无条件地转移到程序中的另一部分。它通常用于跳出循环或提前退出函数。然而&#xff0c;使用goto语句需要谨慎&#xff0c;因为过度使用它可能会导致代码难以理解和维护。 标签&#xff08;Label&#xff09;是一个代码标识符&#xff0c;后面…

柯西变异和正余弦改进的麻雀搜索算法及python实现

目录 柯西变异和正余弦改进的麻雀搜索算法第一部分:麻雀搜索算法概述1.1 麻雀搜索算法简介1.2 算法特点1.3 算法流程1. 初始化阶段2. 觅食者搜索阶段3. 监视者逃逸阶段4. 判断收敛条件1.4 公式描述第二部分:改进方法——柯西变异与正余弦机制2.1 改进思路2.2 柯西变异公式2.3…

Scala文件读写——成绩分析

根据文件解决下例问题 1.读入txt文件&#xff1a;按行读入 import scala.io.Sourceobject Test文件读写_成绩分析 {def main(args: Array[String]): Unit {//1.按行读入val source Source.fromFile("score.txt")val it source.getLines()it.next()//跳过第一行wh…

C# Winform 俄罗斯方块小游戏源码

文章目录 1.设计来源俄罗斯方块小游戏讲解1.1 主界面1.2 游戏界面1.3 游戏结束界面1.4 配置游戏界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https:…

前端框架Vue3——响应式数据,v-on,v-show和v-if,v-for,v-bind

Vue的定义为渐进式的JavaScript框架。所谓渐进式&#xff0c;是指其被设计 为可以自底向上逐层应用。我们可以只使用Vue框架中提供的某层的功 能&#xff0c;也可以与其他第三方库整合使用。当然&#xff0c;Vue本身也提供了完整的 工具链&#xff0c;使用其全套功能进行项目的…

实验二 系统响应及系统稳定性

实验目的 &#xff08;1&#xff09;学会运用Matlab 求解离散时间系统的零状态响应&#xff1b; &#xff08;2&#xff09;学会运用Matlab 求解离散时间系统的单位取样响应&#xff1b; &#xff08;3&#xff09;学会运用Matlab 求解离散时间系统的卷积和。 实验原理及实…

.NET Core发布网站报错 HTTP Error 500.31

报错如图&#xff1a; 解决办法&#xff1a; 打开任务管理器》》服务》》找到这仨服务&#xff0c;右键启动即可&#xff0c;如果已经启动了就重启&#xff1a;

FFmpegFrameRecorder 切分视频文件时结束条件设置不当导致切分后的文件过短问题

问题 下游反馈使用 ffmpeg 切割后的音频文件&#xff0c;无法正确识别其声音的性别 排查流程 1&#xff0c;由于线上大部分用户上传音频后&#xff0c;进行切分后的音频都没问题&#xff0c;因此考虑到这些无法识别性别的音频&#xff0c;有格式问题&#xff0c;需要找出其共…

真题-桂城2018年六年级

01.整点 题目描述 在二维坐标系, 有一个圆&#xff0c;圆心在(0,0)&#xff0c;圆的半径是r。问圆内有多少个整点(所谓的整点就是横坐标和纵坐标都是整数的点)。 若点P的横坐标是整数a&#xff0c;纵坐标是整数b&#xff0c;那么只要满足aa bb < r*r, 那么P就是圆内的整点…

【快捷入门笔记】mySQL基本操作大全-运算符和句子

一、ORDER BY 排序 排序方式 1.升序&#xff1a;ASC&#xff08;默认就是升序&#xff09; 2.降序&#xff1a;DESC 3.如果有多个排序条件&#xff0c;前面的值一样时才会判断第二条件 --按照数学成绩排序 select*from Student ORDER BY math --按照数学成绩排序&#xff0c;…

麒麟安全增强-kysec

DAC: 自主访问控制是linux下默认的接入控制机制,通过对资源读、写、执行操作,保证系统安全 MAC:安全接入控制机制,由操作系统约束的访问控制,默认情况下,MAC不允许任何访问,用户可以自定义策略规则制定允许什么 ,从而避免很多攻击。 MAC强制访问控制常见的实现方式:…

java多线程——synchronized的偏向锁、轻量级锁和重量级锁

在Java中&#xff0c;synchronized关键字是用于实现线程同步的一种机制&#xff0c;它提供了偏向锁、轻量级锁和重量级锁三种锁状态来优化同步性能。以下是这三种锁的原理和使用方法的详细解释&#xff1a; 一、偏向锁&#xff08;Biased Locking&#xff09; 原理 偏向锁的目…

Otter 安装流程

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着公司的发展&#xff0c;订单库的数据目前已达到千万级别&#xff0c;需要进行分表分库&#xff0c;就需要对数据进行迁移&#xff0c;我们使用了otter&#xff0c;这里简单整理下&#xff0c;otter 的安装过程&#xff0c;希望对…

速盾:ddos防御手段哪种比较好?高防cdn怎么样?

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种威胁网络安全的常见攻击手段。为了保护网站和服务器免受DDoS攻击的影响&#xff0c;许多安全专家和公司开发了各种防御手段。在这篇文章中&#xff0c;我们将重点讨论一种常见的DDoS防御手段——高防CDN&#xff08;内容分…

faiss VS ChromaDB

faiss faiss 是一个开源的机器学习库&#xff0c;由Facebook AI Research&#xff08;FAIR&#xff09;开发&#xff0c;主要用于高效的大规模向量搜索和聚类。 faiss 的核心优势在于它为高维向量空间中的数据提供了快速的近似最近邻搜索&#xff08;ANNS&#xff09;算法&am…

微信小程序导航方式详解:声明式导航与编程式导航

微信小程序导航方式详解:声明式导航与编程式导航 引言 在微信小程序的开发中,页面导航是实现用户交互的重要组成部分。小程序提供了两种主要的导航方式:声明式导航和编程式导航。了解这两种导航方式的特点、使用场景及其优缺点,对于提升小程序的用户体验和开发效率至关重…

如何解决Jupyter command `jupyter-contrib` not found.

目录 (base) C:\Users\hello>pip show jupyter_contrib_nbextensions Name: jupyter-contrib-nbextensions Version: 0.7.0 Summary: A collection of Jupyter nbextensions. Home-page: https://github.com/ipython-contrib/jupyter_contrib_nbextensions.git Author: ipyt…

Gitee markdown 使用方法(持续更新)

IPKISS 获取仿真器件的名称 引言正文标题换行第一种------在行末尾手动键入两个空格第二种------额外换行一次&#xff0c;即两行中间留一个空行 缩进与反缩进代码块行内代码添加图片添加超链接 加粗&#xff0c;倾斜&#xff0c;加粗倾斜 引言 有些保密性的文件或者教程&…

Adobe Illustrator 2024 安装教程与下载分享

介绍一下 下载直接看文章末尾 Adobe Illustrator 是一款由Adobe Systems开发的矢量图形编辑软件。它广泛应用于创建和编辑矢量图形、插图、徽标、图标、排版和广告等领域。以下是Adobe Illustrator的一些主要特点和功能&#xff1a; 矢量绘图&#xff1a;Illustrator使用矢量…