Leetcode 插入区间

在这里插入图片描述

class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
        List<int[]> result = new ArrayList<>();
        int i = 0;
        // Step 1: 添加所有在 newInterval 之前的区间
        while(i < intervals.length && intervals[i][1] < newInterval[0]) {
            result.add(intervals[i]);
            i++;
        }
        //执行到这里说明 intervals[i][1] >= newInterval[0]
        //Step 2: 合并与 newInterval 重叠的区间
        //区间 [a, b] 和 [c, d] 重叠 的条件是 a <= d && c <= b
        //这里只需要一个条件进行判断
        while(i < intervals.length && intervals[i][0] <= newInterval[1]) {
            newInterval[0] = Math.min(intervals[i][0], newInterval[0]); 
            newInterval[1] = Math.max(intervals[i][1], newInterval[1]);
            i++;
        }
        result.add(newInterval);
        // Step 3: 添加剩余的区间
        while(i < intervals.length) {
            result.add(intervals[i]);
            i++;
        }

        return result.toArray(new int[result.size()][]);
    }
}

为什么需要 result.toArray(new int[result.size()][]);?

这一行代码的核心作用是将 List<int[]> 类型的数据转换成 二维数组 int[][],这是因为方法的返回类型要求是 int[][]


为什么需要使用 toArray()

  1. result 是一个 List<int[]> 类型
    在代码中,result 是一个 动态数组ArrayList)结构,用来存储合并后的所有区间。

  2. 返回类型是 int[][]
    LeetCode 提供的题目要求返回的是一个 二维数组 int[][],而 List<int[]> 并不直接等同于 int[][]

  3. toArray() 的作用
    toArray()List 类提供的方法,可以将 List 转换成一个数组。

    • 语法
      result.toArray(new int[result.size()][]);
      
    • 传入的参数 new int[result.size()][] 是一个数组模板,toArray() 方法会根据这个模板创建一个正确类型的二维数组。

为什么只需要指定第一个维度的大小?

在二维数组中,数组的结构类似于:

int[][] array = new int[row][];

这里:

  • 第一个维度 row 表示数组有多少行(每个元素是一维数组)。
  • 第二个维度(每一行的长度)可以是 不指定的,即 null 或未初始化,或者动态填充。

toArray() 中的具体作用:
  • new int[result.size()][]
    这里指定了第一个维度的大小 result.size(),即最终的二维数组有多少行。

  • 不指定第二个维度
    这是因为 List<int[]> 中每个元素本身已经是一个一维数组(int[]),因此 toArray() 只需要创建一个包含这些一维数组的外层二维数组。

    • 例如,如果 result[ [1,3], [6,9] ]
      • result.size() = 2(表示有两行)。
      • 每一行的内容已经是 int[] 类型,因此不需要额外指定第二个维度的大小。

为什么这样写可以工作?

  • toArray() 会将 List 中的每个元素(int[])复制到二维数组中。
  • 传入的模板 new int[result.size()][] 确保返回的是一个 int[][] 类型。

示例
假设:

List<int[]> result = new ArrayList<>();
result.add(new int[]{1, 5});
result.add(new int[]{6, 9});

调用:

int[][] array = result.toArray(new int[result.size()][]);

输出:

array = [[1, 5], [6, 9]];

这样返回的 array 就是一个符合要求的二维数组 int[][]


总结

  1. toArray() 的必要性:将 List<int[]> 转换成 int[][],满足返回类型要求。
  2. 只需指定第一个维度的大小:因为 List<int[]> 中的元素本身就是一维数组(int[]),无需再指定第二个维度的大小。
  3. new int[result.size()][] 提供了一个正确类型的模板,toArray() 会基于它创建二维数组。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS|07 标准文档流

标准文档流 一、什么是标准文档流 在制作的 HTML 网页和 PS 画图软件画图时有本质上面的区别: HTML 网页在制作的时候都得遵循一个“流的规则:从左至右、从上至下。 使用 Ps 软件画图时可以在任意地方画图。 <!DOCTYPE html> <html lang"en"> <hea…

redis 缓存使用

工具类 package org.springblade.questionnaire.redis;import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factor…

【排序算法】——选择排序

前言 排序(Sorting) 是计算机程序设计中的一种重要操作&#xff0c;它的功能是将一个数据元素&#xff08;或记录&#xff09;的任意序列&#xff0c;重新排列成一个关键字有序的序列。所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#x…

递归实现指数型枚举(递归)

92. 递归实现指数型枚举 - AcWing题库 每个数有选和不选两种情况 我们把每个数看成每层&#xff0c;可以画出一个递归搜索树 叶子节点就是我们的答案 很容易写出每dfs函数 dfs传入一个u表示层数 当层数大于我们n时&#xff0c;去判断每个数字的选择情况&#xff0c;输出被选…

无限次使用 cursor pro

github地址 cursor-vip 使用方式 在 MacOS/Linux 中&#xff0c;请打开终端&#xff1b; 在 Windows 中&#xff0c;请打开 Git Bash。 然后执行以下命令来安装&#xff1a; 部分电脑可能会误报毒&#xff0c;需要关闭杀毒软件/电脑管家/安全防护再进行 方式1&#xff1a;通过…

【AI热点】小型语言模型(SLM)的崛起:如何在AI时代中找到你的“左膀右臂”?

人工智能模型的演变 多年来&#xff0c;谷歌等科技巨头和OpenAI等初创公司&#xff0c;一直在不遗余力地利用海量在线数据&#xff0c;打造更大、更昂贵的人工智能&#xff08;AI&#xff09;模型。这些大型语言模型&#xff08;LLM&#xff09;被广泛应用于ChatGPT等聊天机器…

解决Nginx + Vue.js (ruoyi-vue) 单页应用(SPA) 404问题的指南

问题描述 在使用Vue.js构建的单页应用&#xff08;SPA&#xff09;中&#xff0c;特别是像ruoyi-vue这样的框架&#xff0c;如果启用了HTML5历史记录模式进行路由管理&#xff0c;那么用户直接访问子路径或刷新页面时可能会遇到404错误。这是因为当用户尝试访问一个非根路径时…

Ubuntu22.04配置3D gaussian splatting

这篇博客提供了3D gaussian splatting在新安装Ubuntu上的配置过程。 1.拉仓库 2.安装显卡驱动和cuda版本 3.安装Pytorch 4.安装Pycharm和配置Python 5.安装附加依赖项&#xff08;方法一&#xff09; 6.安装Anaconda&#xff08;方法二&#xff09; 7.测试 1.拉仓库 # HT…

在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c

在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c 1. Installing the extension (在 Visual Studio Code 中安装插件)1.1. Extensions for Visual Studio Code1.2. C/C1.2.1. Pre-requisites 1.3. Makefile Tools 2. Configuring your project (配置项目)2.1.…

深度解析:推荐系统的进化之路与深度学习革命

目录 前深度学习时代一推荐系统的进化之路 浪潮之巅一深度学习在推荐系统中的应用 Embedding 技术在推荐系统中的应用 Embedding的原理 Embedding的分类 Word2vec Item2vec Embedding 与深度学习推荐系统的结合 YouTube 推荐系统召回层 局部敏感哈希 多角度审视推…

MAPTR:在线矢量化高精地图构建的结构化建模与学习(2208)

MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION MAPTR&#xff1a;在线矢量化高精地图构建的结构化建模与学习 ABSTRACT High-definition (HD) map provides abundant and precise environmental information of the driving scene, se…

SpringBoot集成Canal实现MySQL实时同步数据到Redis

MySQL增量数据同步利器Canal环境搭建流程 软件环境 JDK17.0.12 canal-server1.1.7 canal-client1.1.7 MySQL5.7 IDEA2024.2.0.2 我们先看Canal1.1.7源码对应的项目结构 1、基于源码编译打包 # 源码下载地址 https://github.com/alibaba/canal # 执行以下命令&#xff0…

嵌入式驱动开发详解16(音频驱动开发)

文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发&#xff0c;但是由于ALSA驱动框架过于复杂&#xff0c;实现音频编解码芯片的驱动不是一个人能完成的&#xf…

OpenGL ES 03 加载3张图片并做混合处理

OpenGL ES 02 加载3张图片并做混合处理 什么是纹理单元纹理单元的作用使用纹理单元的步骤详细解释加载图片并绑定到到GPU纹理单元采样器的设置1.设置采样器变量的纹理单元编号&#xff0c;目的是为了告诉纹理采样器&#xff0c;从哪个纹理单元采集数据2.如果你没有显式地设置采…

JAVA没有搞头了吗?

前言 今年的Java程序员群体似乎承受着前所未有的焦虑。投递简历无人问津&#xff0c;难得的面试机会也难以把握&#xff0c;即便成功入职&#xff0c;也往往难以长久。于是&#xff0c;不少程序员感叹&#xff1a;互联网的寒冬似乎又一次卷土重来&#xff0c;环境如此恶劣&…

短视频矩阵贴牌:打造品牌新势力的策略与实践

在数字化浪潮席卷全球的今天&#xff0c;短视频以其独特的魅力迅速崛起&#xff0c;成为连接用户与品牌的重要桥梁。企业为了快速抢占市场&#xff0c;提升品牌影响力&#xff0c;纷纷探索短视频矩阵贴牌这一新兴模式。本文将深入探讨短视频矩阵贴牌的概念、优势、实施流程及注…

视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…

简易记事本项目(基于Vue 3 + Element Plus + SSM 个人事件管理系统)

项目简介 点滴365是一个基于 Vue 3 Element Plus SSM 开发的个人事件管理系统,旨在帮助用户高效管理 个人日程 和 待办事项。系统支持日记撰写、待办事项管理、数据统计分析、图片上传、定时提醒、实时天气等功能,让用户可以更好地记录生活点滴、规划工作任务。 核心技术栈…

【C语言】头文件

所有学习过C语言的朋友都熟悉这样一段代码&#xff1a; #include <stdio.h>int main(int argc, char *argv[]) {return 0; }那么&#xff0c;你真的了解 <stdio.h> 吗&#xff1f; <stdio…

ChatGPT Search开放:实时多模态搜索新体验

点击访问 chatTools 免费体验GPT最新模型&#xff0c;包括o1推理模型、GPT4o、Claude、Gemini等模型&#xff01; ChatGPT Search&#xff1a;功能亮点解析 本次更新的ChatGPT Search带来了多项令人瞩目的功能&#xff0c;使其在搜索引擎市场中更具竞争力。 1. 高级语音模式&…