區間應用: 插入新的區間 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

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
找出區間[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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
媽 ~ 我終於把【工程數學】應用在生活中了 !! 《 LOOKUP 與 複數 的完美結合運用 》
Thumbnail
花旗在今年 3 月公開的研究報告〈金錢、代幣與遊戲〉中表示,RWA 代幣化有望成為下一次區塊鏈技術大規模應用的殺手鐧,究竟是怎樣的應用,可以連結傳統金融與去中心化金融呢?現在就來了解「RWA 代幣化」吧!
Thumbnail
科技凸顯了世代間的差異,你是否耳聞過年邁的長者抱怨餐廳的菜單電子化的話題?在不同世代對於科技應用的接受程度明顯開始有了巨大的差別,例如嬰兒潮一代(1946-1964年世代的人)的父母/祖父母對於千禧世代(1981-1996年世代的人)的子女積極擁抱新科技,經常抱持觀望態度,儘管嬰兒潮一代是第一代與電
Thumbnail
大數據在金融領域的角色是什麼?它如何改變我們的生活? 大數據是指數據的龐大量、速度和多樣性,需要專業的技能來處理和分析。在金融領域,大數據的應用可以幫助金融機構分析客戶行為、評估風險、優化投資組合等。
Thumbnail
新北市鶯歌區尖山路近期一直在發展當中,陸續有店家開幕,從量販店、飲料店還有連鎖早餐店,現在又多了一間火鍋的選擇鍋老闆鍋物店,店家選在去年開幕店家真是聰明,一開幕擁有許多排隊人潮,所以我們也跟風來試試看。 新北市鶯歌區鍋老闆鍋物相關資訊:: 地址: 新北市鶯歌區尖山路165之3號 營業時間: AM11
Thumbnail
台灣各地都有許多社區型公園,新北市鶯歌區尖山里尖山路尖山公園算是一個很受當地歡迎公園。這個公園就在鍋老闆鍋物鶯歌店附近,此地好適合帶孩子來運動放電的公園、如果你家有幼小孩子不坊來走走。 新北市鶯歌區尖山公園相關資訊:: 地址: 新北市鶯歌區尖山路156巷71弄5號 開放時間: 開放空間 (無時間限制