1. 程式人生 > >leetcode | 57. Insert Interval

leetcode | 57. Insert Interval

題目

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:

Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[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].

思路與解法

intervals列表中的區間intervalnewInterval有三種不同情況:①inteval在左,且兩者不相交;②兩者相交;③interval在右,且兩者不相交。
當處於第①種情況時,直接將interval

加入到結果列表中即可;
當處於第②中情況時,更新newInterval的左端點和右端點;
當處於第③種情況時,將interval加入到結果列表中。

程式碼實現(GO)

/**
 * Definition for an interval.
 * type Interval struct {
 *     Start int
 *     End   int
 * }
 */
func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func max(a, b int) int {
    if
a > b { return a } return b } func insert(intervals []Interval, newInterval Interval) []Interval { intervals_merged := make([]Interval, 0) flag := false var i int var interval Interval // 遍歷整個intervals區間 for i, interval = range intervals { // 當interval右端點 < newInterval左端點,說明兩者無交集,即可將interval加入到intervals_merged中 if interval.End < newInterval.Start { intervals_merged = append(intervals_merged, interval) } else if interval.Start > newInterval.End { // 當interval左端點 > newInterval右端點,說明兩者無交集,且newInterval不會再次更新,即可將newInterval加入到intervals_merged中 flag = true intervals_merged = append(intervals_merged, newInterval) break } else { // 若interval和newInterval有交集,則更新newInterval newInterval.Start = min(interval.Start, newInterval.Start) newInterval.End = max(interval.End, newInterval.End) } } // flag == true,說明已經將newInterval加入到intervals_merged中,之後再將intervals[i:]加入即可 if flag == true { intervals_merged = append(intervals_merged, intervals[i:]...) } else { // flag == false,說明沒有將newInterval加入到intervals_merged,intervals中沒有並未遍歷過的區間 intervals_merged = append(intervals_merged, newInterval) } return intervals_merged }

測試結果

在這裡插入圖片描述