Leetcode 57: 插入區間

Leetcode 57: 插入區間

問題描述:
給定一個非重疊的區間集合 intervals(按開始時間升序排列)和一個新的區間 newInterval,將新的區間插入到區間集合中并合并重疊的部分,最后返回結果區間集合。


適合面試的解法:線性掃描

解法特點:

  • 利用區間的順序性(已按開始時間排序),通過一次線性掃描解決問題,邏輯清晰且復雜度低。
  • 核心思路:
    • newInterval 插入到正確的位置,并合并所有可能的重疊區間。
  • 時間復雜度 (O(n)),空間復雜度 (O(n)),非常適合面試場景。

解法思路

核心步驟:

  1. 線性掃描區間數組:

    • 遍歷 intervals,針對每個區間,按以下規則處理:
      • 如果當前區間在新區間之前(且不重疊),將當前區間直接加入結果。
      • 如果當前區間與新區間重疊,則調整 newInterval 為兩個區間的合并結果。
      • 如果當前區間在新區間之后(且不重疊),將新區間加入結果后把剩余區間全加入結果。
  2. 處理新區間:

    • 如果掃描結束時尚未添加 newInterval,將其加入結果。
  3. 返回結果:

    • 返回處理后的區間集合。

代碼模板:線性掃描法

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> result = new ArrayList<>();int i = 0;int n = intervals.length;// Step 1: 遍歷并處理區間while (i < n) {// 當前區間在新區間之前(不重疊)if (intervals[i][1] < newInterval[0]) {result.add(intervals[i]);i++;}// 當前區間與新區間重疊else if (intervals[i][0] <= newInterval[1]) {newInterval[0] = Math.min(intervals[i][0], newInterval[0]);newInterval[1] = Math.max(intervals[i][1], newInterval[1]);i++;}// 當前區間在新區間之后(不重疊)else {break; // 跳出,后續區間加入結果}}// Step 2: 添加新區間result.add(newInterval);// Step 3: 添加剩余區間while (i < n) {result.add(intervals[i]);i++;}// Step 4: 返回結果return result.toArray(new int[result.size()][]);}
}

代碼詳細注釋

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {// 初始化結果列表List<int[]> result = new ArrayList<>();int i = 0; // 當前處理區間的索引int n = intervals.length;// Step 1: 遍歷區間列表while (i < n) {// Case 1: 當前區間完全在新區間之前(不重疊)if (intervals[i][1] < newInterval[0]) {result.add(intervals[i]); // 直接加入結果i++;}// Case 2: 當前區間與新區間重疊,需要合并else if (intervals[i][0] <= newInterval[1]) {newInterval[0] = Math.min(intervals[i][0], newInterval[0]); // 更新新區間的開始newInterval[1] = Math.max(intervals[i][1], newInterval[1]); // 更新新區間的結束i++;}// Case 3: 當前區間完全在新區間之后(不重疊)else {break; // 跳出循環,后續區間直接加入結果}}// Step 2: 將新區間加入結果result.add(newInterval);// Step 3: 將剩余區間加入結果while (i < n) {result.add(intervals[i]);i++;}// Step 4: 將結果轉為二維數組并返回return result.toArray(new int[result.size()][]);}
}

復雜度分析

時間復雜度:

  • 線性掃描: 遍歷所有區間,每個區間最多處理一次,時間復雜度為 (O(n))。

空間復雜度:

  • 使用結果列表存儲區間,最多 (O(n)) 的空間。

測試用例

示例 1:

輸入:

intervals = [[1,3],[6,9]], newInterval = [2,5]

輸出:

[[1,5],[6,9]]

解釋: 新區間 [2,5] 與索引 [1,3] 重疊,合并為 [1,5]


示例 2:

輸入:

intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,9]

輸出:

[[1,2],[3,10],[12,16]]

解釋: 新區間 [4,9][3,5],[6,7],[8,10] 重疊,合并為 [3,10]


示例 3:

輸入:

intervals = [], newInterval = [5,7]

輸出:

[[5,7]]

解釋: 沒有初始區間,新區間直接插入。


示例 4:

輸入:

intervals = [[1,5]], newInterval = [2,3]

輸出:

[[1,5]]

解釋: 新區間 [2,3] 被包含在已有區間 [1,5] 中,無需額外處理。


如何快速 AC(面試技巧)

1. 思路清晰:

  • 利用區間的順序性,分為三種情況處理:
    • 當前區間在 newInterval 之前;
    • 當前區間與 newInterval 重疊;
    • 當前區間在 newInterval 之后。
  • 遍歷結束后處理剩余區間。

2. 時間復雜度分析:

  • 明確線性掃描的復雜度為 (O(n)),只需一次遍歷即可完成。

3. 特殊情況處理:

  • 空區間:直接將 newInterval 插入。
  • 新區間完全被包含:無需額外處理。

4. 擴展能力:

  • 可以進一步提及如何處理區間有額外屬性(如權重或標簽)時的擴展需求。
  • 針對大規模區間集合的場景,可以利用二分查找優化插入點。

推薦解法:線性掃描法

適合面試的理由:

  1. 思路邏輯清晰,符合區間處理的直觀方式。
  2. 時間復雜度 (O(n)),空間復雜度 (O(n)),為最優解法。
  3. 代碼簡潔清晰,易于維護和擴展。

如何實現快速 AC?

  1. 使用單次線性掃描,按三個情況處理區間。
  2. 特殊情況(無區間或完全包含)處理到位。
  3. 明確時間和空間復雜度優勢,確保解法高效。

通過線性掃描法,可以快速實現插入區間問題,并展示對區間處理的全面理解,非常適合面試場景!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897036.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897036.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897036.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

爬蟲面試:關于爬蟲破解驗證碼的13個經典面試題

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 1. ?什么是驗證碼(CAPTCHA)?它的作用是什么?2. ?常見的驗證碼類型有哪些?3. ?在爬蟲開發中,遇到驗證碼時通常有哪些解決方案?4. ?如何使用第三方驗證碼識別服務?請舉例說明。5. ?訓練自己的驗證碼識別模型…

Kylin麒麟操作系統服務部署 | NFS服務部署

以下所使用的環境為&#xff1a; 虛擬化軟件&#xff1a;VMware Workstation 17 Pro 麒麟系統版本&#xff1a;Kylin-Server-V10-SP3-2403-Release-20240426-x86_64 一、 NFS服務概述 NFS&#xff08;Network File System&#xff09;&#xff0c;即網絡文件系統。是一種使用于…

三參數水質在線分析儀:從源頭保障飲用水安全

【TH-ZS03】飲用水安全是人類健康的重要保障&#xff0c;其質量直接關系到人們的生命健康。隨著工業化、城市化的快速發展&#xff0c;水體污染問題日益嚴峻&#xff0c;飲用水安全面臨著前所未有的挑戰。為了從源頭保障飲用水安全&#xff0c;科學、高效的水質監測手段必不可少…

PGlite:瀏覽器中運行的PostgreSQL

PGlite 是一款基于 WebAssembly&#xff08;WASM&#xff09;構建的輕量級 PostgreSQL 數據庫引擎&#xff0c;旨在簡化開發者在瀏覽器、Node.js、Bun 或 Deno 環境中運行 PostgreSQL。PGlite 無需復雜的安裝或配置&#xff0c;特別適合開發測試、本地化應用及快速原型設計。 一…

【Spring AOP】_使用注解編寫AOP程序

目錄 1. 以增加方法執行時間為例使用AOP 1.1 引入AOP依賴 1.2 編寫AOP程序 2. AOP的重要概念 3. AOP通知類型與通知方法標注 3.1 在通知方法前使用對應注解 3.2 使用Pointcut注解提取公共切點表達式 3.3 跨類使用切點 3.4 切面類排序 1. 以增加方法執行時間為例使用AO…

C# iText 抽取PDF頁特定區域文本內容

開發中需要提取PDF文件某頁某區域內的特定文本內容&#xff0c;對于文字轉換而成的PDF文件&#xff0c;可以使用iText庫&#xff0c;通過Rectangle劃定PDF頁中特定區域提取文字&#xff0c;思路是將這個Rectangle框定區域放到TextRegionEventFilter過濾器中&#xff0c;代碼如下…

Java 關鍵字 volatile

volatile 是 Java 中的一個關鍵字&#xff0c;用于修飾變量&#xff0c;確保多線程環境下的可見性和有序性。它主要用于解決以下兩個問題&#xff1a; 可見性問題&#xff1a;一個線程對 volatile 變量的修改對其他線程立即可見。有序性問題&#xff1a;禁止指令重排序&#x…

python網絡爬蟲開發實戰之基本庫使用

目錄 第二章 基本庫的使用 2.1 urllib的使用 1 發送請求 2 處理異常 3 解析鏈接 4 分析Robots協議 2.2 requests的使用 1 準備工作 2 實例引入 3 GET請求 4 POST請求 5 響應 6 高級用法 2.3 正則表達式 1 實例引入 2 match 3 search 4 findall 5 sub 6 com…

Linux內存分頁:原理、優勢與實踐

一、分頁機制核心原理 1.1 分頁技術原理 核心思想: 將虛擬地址空間和物理內存劃分為固定大小的頁(Page),通過頁表(Page Table)建立虛擬頁到物理頁框(Page Frame)的映射。例如,x86_64架構的4級頁表結構: 虛擬地址: [63-48] | [47-39] PGD | [38-30] PUD | [29-21]…

文件上傳漏洞與phpcms漏洞安全分析

目錄 1. 文件上傳漏洞簡介 2. 文件上傳漏洞的危害 3. 文件上傳漏洞的觸發條件 1. 文件必須能被服務器解析執行 2. 上傳目錄必須支持代碼執行 3. 需要能訪問上傳的文件 4. 例外情況&#xff1a;非腳本文件也可能被執行 4. 常見的攻擊手法 4.1 直接上傳惡意文件 4.2 文件…

模塊和端口

1、模塊 模塊內部的5個組成是&#xff1a;變量聲明 數據流語句 低層模塊實例 函數和任務 行為語句 SR鎖存器 timescale 1ns / 1psmodule SR_latch(input wire Sbar ,input wire Rbar ,output wire Q ,output wire Qbar);nand…

爬蟲(持續更新ing)

爬蟲&#xff08;持續更新ing&#xff09; # 網絡請求 # url統一資源定位符&#xff08;如&#xff1a;https://www.baidu.com&#xff09; # 請求過程&#xff1a;客戶端的web瀏覽器向服務器發起請求 # 請求又分為四部分&#xff1a;請求網址&#xff0c;請求方法&#xff08…

2025.3.2機器學習筆記:PINN文獻閱讀

2025.3.2周報 一、文獻閱讀題目信息摘要Abstract創新點網絡架構實驗結論不足以及展望 一、文獻閱讀 題目信息 題目&#xff1a; Physics-Informed Neural Networks of the Saint-Venant Equations for Downscaling a Large-Scale River Model期刊&#xff1a; Water Resource…

使用IDEA如何隱藏文件或文件夾

選擇file -> settings 選擇Editor -> File Types ->Ignored Files and Folders (忽略文件和目錄) 點擊號就可以指定想要隱藏的文件或文件夾

前端基礎之腳手架

腳手架結構 目錄結構 這里的package.json&#xff0c;存放著我們去執行npm run serve 或是npm run build的腳本文件 package-lock.json中存放著我們使用的外部包的版本類型&#xff0c;相當于maven src下的main.js是整個項目的入口文件 src下的components用于存放組件&#xff…

MacBook上API調??具推薦

在當今的軟件開發中&#xff0c;API調用工具已經成為了開發者不可或缺的助手。無論是前端、后端還是全棧開發&#xff0c;API的調試、測試和管理都是日常工作中的重要環節。想象一下&#xff0c;如果沒有這些工具&#xff0c;開發者可能需要手動編寫復雜的CURL命令&#xff0c;…

pgsql行列轉換

目錄 一、造測試數據 二、行轉列 1.函數定義 2.語法 3.示例 三、列轉行 1.函數定義 2.語法 3.示例 一、造測試數據 create table test ( id int, json1 varchar, json2 varchar );insert into test values(1,111,{111}); insert into test values(2,111,222,{111,22…

NVIDIA(英偉達) GPU 芯片架構發展史

GPU 性能的關鍵參數 CUDA 核心數量&#xff08;個&#xff09;&#xff1a;決定了 GPU 并行處理能力&#xff0c;在 AI 等并行計算類業務下&#xff0c;CUDA 核心越多性能越好。 顯存容量&#xff08;GB&#xff09;&#xff1a;決定了 GPU 加載數據量的大小&#xff0c;在 AI…

《Python實戰進階》No 10:基于Flask案例的Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻擊

第10集&#xff1a;Web 安全性&#xff1a;防止 SQL 注入、XSS 和 CSRF 攻擊 在現代 Web 開發中&#xff0c;安全性是至關重要的。無論是用戶數據的保護&#xff0c;還是系統穩定性的維護&#xff0c;開發者都需要對常見的 Web 安全威脅有深刻的理解&#xff0c;并采取有效的防…

【大數據分析 | 深度學習】在Hadoop上實現分布式深度學習

【作者主頁】Francek Chen 【專欄介紹】 ? ? ?智能大數據分析 ? ? ? 智能大數據分析是指利用先進的技術和算法對大規模數據進行深入分析和挖掘&#xff0c;以提取有價值的信息和洞察。它結合了大數據技術、人工智能&#xff08;AI&#xff09;、機器學習&#xff08;ML&a…