區間應用: 插入新的區間 Insert Interval_Leetcode #57

閱讀時間約 5 分鐘

題目敘述

題目會給定我們一個已經根據起點升序排列好的輸入陣列 intervals,裡面的每個pair分別代表每個區間的起點和終點。

接下來新插入一個區間newInterval,插入後如果和原本的區間重疊,請把他們合併
要求我們輸出插入後的結果。


題目的原文敘述


測試範例

Example 1:

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

新插入的[2, 5][1, 3]有重疊,合併為[1, 5]

所以插入後的結果為
[[1, 5], [6, 9]]

Example 2:

Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].

新插入的[4, 8][3, 5], [6, 7], [8, 10]有重疊,合併為[3, 10]

所以插入後的結果為
[[1,2],[3,10],[12,16]]

約束條件

Constraints:

  • 0 <= intervals.length <= 10^4

輸入陣列的長度介於0~一萬。

  • intervals[i].length == 2

輸入陣列內的每個元素都是一組pair,分別代表區間起點和終點。

  • 0 <= starti <= endi <= 10^5

起點和終點都介於0~十萬之間。

  • intervals is sorted by starti in ascending order.

輸入陣列已經根據起點做好升序排列。

  • newInterval.length == 2

新插入的區間也是一組pair,分別代表區間起點和終點。

  • 0 <= start <= end <= 10^5

起點和終點都介於0~十萬之間。


演算法 掃描與合併


題目已經給了我們一個很強的條件:

輸入的區間都已經依照起點位置排序好


那麼,我們接著只要依序掃描每一個區間,檢查新插入的區間和當下的區間i有沒有重疊?

如果有重疊合併並且計算擴張後的新起點和新終點

如果沒有重疊,依照區間i的起點終點位置判斷在新區間的左邊還是右邊。
把區間i放在新區間的左手邊或者右手邊即可。


程式碼 掃描與合併

class Solution:
def insert(self, intervals, newInterval):

# Constant to help us access start point and end point of interval
START, END = 0, 1

s, e = newInterval[START], newInterval[END]

left, right = [], []

for cur_interval in intervals:

if cur_interval[END] < s:
# current interval is on the left-hand side of newInterval
left += [ cur_interval ]

elif cur_interval[START] > e:
# current interval is on the right-hand side of newInterval
right += [ cur_interval ]

else:
# current interval has overlap with newInterval
# merge and update boundary
s = min(s, cur_interval[START])
e = max(e, cur_interval[END])

return left + [ [s, e] ] + right

複雜度分析 掃描與合併

時間複雜度: 一個線性掃苗,所需時間為O(n)

空間複雜度: 一個新的陣列,存放合併、排序好的所有區間,陣列長度最大為O(n)。


關鍵知識點

題目已經幫我們排序好區間順序
我們只要接著依序檢查區間、(假如有重疊的話)合併區間即可。


Reference:

[1] Insert Interval - LeetCode

avatar-img
88會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
找出區間[1, n] 內的軸心點位置。通過介紹直覺法、改良直覺法和二分搜尋等算法,最終給出了解析解(推導軸心點的公式解),提供了對應的程式碼和參考資料。該問題的最優解是使用解析解,能夠在O(1)的時間複雜度內找到答案。
題目會給定一個陣列nums和一個目標值goal。計算子陣列總和=goal的數目有多少。演算法包含前綴和和字典的技巧,時間複雜度為O(n),空間複雜度為O(n)。
題目敘述 題目會給定一個鏈結串列的起始點,要求我們把其中區間總和為0的部分刪除掉。 例如 1→ 2 → -2 → 3 → 4 裡面有一段是2 → -2 區間總和為零,所以簡化刪除後變成 1→ 3 → 4 題目的原文敘述 測試範例 Example 1: Input: head
題目敘述 題目會給定我們兩個字串。 第一個是指定順序的字串order。 第二個是輸入字串s。 要求我們依據order給定的順序,重新排列s。 如果出現order中沒有出現的字母,任意位置皆可。 合法答案可能不只一組,輸出其中一種即可。 題目的原文敘述 測試範例 Example
題目敘述 題目會給定一棵二元樹的根結點,要求我們判定這是否為一顆合法的奇偶二元樹? 奇偶二元樹的定義: 從上到下依序是第0層、第一層、...、第n層 偶數層裡面的節點值都必須是奇數,而且由左到右嚴格遞增。 奇數層裡面的節點值都必須是偶數,而且由左到右嚴格遞減。 題目的原文敘述 測試
題目敘述 題目會給定一棵二元樹的根結點,要求我們找出這棵二元樹最後一層最左邊的值。 題目的原文敘述 測試範例 Example 1: Input: root = [2,1,3] Output: 1 Example 2: Input: root = [1,2,3,4,null,5,6
找出區間[1, n] 內的軸心點位置。通過介紹直覺法、改良直覺法和二分搜尋等算法,最終給出了解析解(推導軸心點的公式解),提供了對應的程式碼和參考資料。該問題的最優解是使用解析解,能夠在O(1)的時間複雜度內找到答案。
題目會給定一個陣列nums和一個目標值goal。計算子陣列總和=goal的數目有多少。演算法包含前綴和和字典的技巧,時間複雜度為O(n),空間複雜度為O(n)。
題目敘述 題目會給定一個鏈結串列的起始點,要求我們把其中區間總和為0的部分刪除掉。 例如 1→ 2 → -2 → 3 → 4 裡面有一段是2 → -2 區間總和為零,所以簡化刪除後變成 1→ 3 → 4 題目的原文敘述 測試範例 Example 1: Input: head
題目敘述 題目會給定我們兩個字串。 第一個是指定順序的字串order。 第二個是輸入字串s。 要求我們依據order給定的順序,重新排列s。 如果出現order中沒有出現的字母,任意位置皆可。 合法答案可能不只一組,輸出其中一種即可。 題目的原文敘述 測試範例 Example
題目敘述 題目會給定一棵二元樹的根結點,要求我們判定這是否為一顆合法的奇偶二元樹? 奇偶二元樹的定義: 從上到下依序是第0層、第一層、...、第n層 偶數層裡面的節點值都必須是奇數,而且由左到右嚴格遞增。 奇數層裡面的節點值都必須是偶數,而且由左到右嚴格遞減。 題目的原文敘述 測試
題目敘述 題目會給定一棵二元樹的根結點,要求我們找出這棵二元樹最後一層最左邊的值。 題目的原文敘述 測試範例 Example 1: Input: root = [2,1,3] Output: 1 Example 2: Input: root = [1,2,3,4,null,5,6
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
媽 ~ 我終於把【工程數學】應用在生活中了 !! 《 LOOKUP 與 複數 的完美結合運用 》
Thumbnail
花旗在今年 3 月公開的研究報告〈金錢、代幣與遊戲〉中表示,RWA 代幣化有望成為下一次區塊鏈技術大規模應用的殺手鐧,究竟是怎樣的應用,可以連結傳統金融與去中心化金融呢?現在就來了解「RWA 代幣化」吧!
Thumbnail
科技凸顯了世代間的差異,你是否耳聞過年邁的長者抱怨餐廳的菜單電子化的話題?在不同世代對於科技應用的接受程度明顯開始有了巨大的差別,例如嬰兒潮一代(1946-1964年世代的人)的父母/祖父母對於千禧世代(1981-1996年世代的人)的子女積極擁抱新科技,經常抱持觀望態度,儘管嬰兒潮一代是第一代與電
Thumbnail
大數據在金融領域的角色是什麼?它如何改變我們的生活? 大數據是指數據的龐大量、速度和多樣性,需要專業的技能來處理和分析。在金融領域,大數據的應用可以幫助金融機構分析客戶行為、評估風險、優化投資組合等。
Thumbnail
新北市鶯歌區尖山路近期一直在發展當中,陸續有店家開幕,從量販店、飲料店還有連鎖早餐店,現在又多了一間火鍋的選擇鍋老闆鍋物店,店家選在去年開幕店家真是聰明,一開幕擁有許多排隊人潮,所以我們也跟風來試試看。 新北市鶯歌區鍋老闆鍋物相關資訊:: 地址: 新北市鶯歌區尖山路165之3號 營業時間: AM11
Thumbnail
台灣各地都有許多社區型公園,新北市鶯歌區尖山里尖山路尖山公園算是一個很受當地歡迎公園。這個公園就在鍋老闆鍋物鶯歌店附近,此地好適合帶孩子來運動放電的公園、如果你家有幼小孩子不坊來走走。 新北市鶯歌區尖山公園相關資訊:: 地址: 新北市鶯歌區尖山路156巷71弄5號 開放時間: 開放空間 (無時間限制
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
媽 ~ 我終於把【工程數學】應用在生活中了 !! 《 LOOKUP 與 複數 的完美結合運用 》
Thumbnail
花旗在今年 3 月公開的研究報告〈金錢、代幣與遊戲〉中表示,RWA 代幣化有望成為下一次區塊鏈技術大規模應用的殺手鐧,究竟是怎樣的應用,可以連結傳統金融與去中心化金融呢?現在就來了解「RWA 代幣化」吧!
Thumbnail
科技凸顯了世代間的差異,你是否耳聞過年邁的長者抱怨餐廳的菜單電子化的話題?在不同世代對於科技應用的接受程度明顯開始有了巨大的差別,例如嬰兒潮一代(1946-1964年世代的人)的父母/祖父母對於千禧世代(1981-1996年世代的人)的子女積極擁抱新科技,經常抱持觀望態度,儘管嬰兒潮一代是第一代與電
Thumbnail
大數據在金融領域的角色是什麼?它如何改變我們的生活? 大數據是指數據的龐大量、速度和多樣性,需要專業的技能來處理和分析。在金融領域,大數據的應用可以幫助金融機構分析客戶行為、評估風險、優化投資組合等。
Thumbnail
新北市鶯歌區尖山路近期一直在發展當中,陸續有店家開幕,從量販店、飲料店還有連鎖早餐店,現在又多了一間火鍋的選擇鍋老闆鍋物店,店家選在去年開幕店家真是聰明,一開幕擁有許多排隊人潮,所以我們也跟風來試試看。 新北市鶯歌區鍋老闆鍋物相關資訊:: 地址: 新北市鶯歌區尖山路165之3號 營業時間: AM11
Thumbnail
台灣各地都有許多社區型公園,新北市鶯歌區尖山里尖山路尖山公園算是一個很受當地歡迎公園。這個公園就在鍋老闆鍋物鶯歌店附近,此地好適合帶孩子來運動放電的公園、如果你家有幼小孩子不坊來走走。 新北市鶯歌區尖山公園相關資訊:: 地址: 新北市鶯歌區尖山路156巷71弄5號 開放時間: 開放空間 (無時間限制