iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
佛心分享-刷題不只是刷題

刷題筆記系列 第 21

[Day21] Insert Interval

  • 分享至 

  • xImage
  •  

You are given an array of non-overlapping intervals intervals where intervals[i] = [startᵢ, endᵢ] represent the start and the end of the iᵗʰ interval, and intervals is sorted in ascending order by startᵢ.

You are also given an interval newInterval = [start, end] that represents the start and end of another interval.

Insert newInterval into intervals such that intervals is still sorted in ascending order by startᵢ, intervals still does not have any overlapping intervals (merge overlapping intervals if necessary).
Return intervals after the insertion.

Note that you don't need to modify intervals in-place. You can make a new array and return it.

給定一個陣列intervals,陣列intervals中有多個不重疊區間,且陣列intervals[i] = [starti, endi],"start"跟"end"分別代表第i個區間的開始與結束,而陣列中的區間是以"starti"的升冪方式排序。
同時也給定一個另一個區間newInterval = [start, end],"start"與"end"分別代表了newInterval的開始與結束。
請將newInterval插入陣列intervals中,且不能把亂原有的排序,必須讓陣列intervals仍以starti升冪的方式排序。除此之外,陣列intervals中所有的區間都不能重疊(必要時,須將重疊的區間進行排序)。
插入newInterval並合併後回傳結果。
注意:你不需要原地(in-place)修改陣列intervals,你可以用一個新的陣列作為回傳的結果。

https://ithelp.ithome.com.tw/upload/images/20240901/20168667VvuW7bj9ov.png


一開始又被前天的六種重疊情境卡住(到底是要卡幾次啦!),還是要回歸到題目本身,那六種只是可能發生的重疊情境,並不代表所有情況都要在程式碼中列出處理呀~~

抱怨歸抱怨,回歸正題,這一題其實也是佛心來著,因為他在一開始就說明,原本的陣列intervals是按照升冪排列的,而且!是允許不同陣列作為結果回傳的,說穿了,就僅僅只是昨天的變化題。

所以其實只要把新的區間newInterval先加入到陣列intervals後,一樣使用for loop去遍歷陣列intervals後,一一檢查所有需要合併的區間,把結果裝進陣列mergedArr裡面回傳就大功告成囉!

來看程式碼

var insert = function(intervals, newInterval) {
    if (!intervals.length) return [newInterval];
    intervals.push(newInterval);
    intervals.sort((a,b)=> a[0] - b[0]);
    let mergedArr = [intervals[0]];
    for (let i = 1; i < intervals.length; i ++){
        if (mergedArr[mergedArr.length - 1][1] >= intervals[i][0]){
            mergedArr[mergedArr.length - 1][1] = Math.max(mergedArr[mergedArr.length - 1][1], intervals[i][1]); 
        } else {
            mergedArr.push(intervals[i]);
        }  
    }
    return intervals = mergedArr;

};

上一篇
[Day20] Merge Intervals
下一篇
[Day22] Patterns: Binary Search(二分法搜尋)
系列文
刷題筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言