問題描述
給出乙個無重疊的 ,按照區間起始端點排序的區間列表。
在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。
示例 1:
輸入:示例 2:intervals = [[1,3],[6,9]]
newinterval = [2,5]
輸出:[[1,5],[6,9]]
輸入:先計算兩邊再計算中間這裡我們人為把陣列分為3部分,左邊不重合的(如果有)新增到集合list中,右邊不重合的(如果有)也新增到集合list中,然後再合併中間的,這裡以示例2為例畫個圖看一下intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]]
newinterval = [4,8]
輸出:[[1,2],[3,10],[12,16]]
解釋:這是因為新的區間 [4,8] 與 [3,5],[6,7],[8,10] 重疊。
原理很簡單,來看下**
public
int[
]insert
(int
intervals,
int[
] newinterval)
; list<
int[
]> reslist =
newarraylist
<
>()
;//乙個從左邊開始找不重合的
int left =0;
//乙個從右邊開始找不重合的
int right = intervals.length -1;
//左邊不重合的新增到list中
while
(left < intervals.length && intervals[left][1
]< newinterval[0]
)//右邊不重合的新增到list中
while
(right >=
0&& intervals[right][0
]> newinterval[1]
)//下面一大坨是合併中間重合的,注意一些邊界條件的判斷
int[
] newarr =
newint[2
];newarr[0]
= left >= intervals.length ? newinterval[0]
: math.
min(intervals[left][0
], newinterval[0]
);newarr[1]
= right <
0? newinterval[1]
: math.
max(intervals[right][1
], newinterval[1]
);reslist.
add(left, newarr)
;//這一大坨是把list轉二維陣列
int[
] resarr =
newint
[reslist.
size()
][2]
;for
(int i =
0; i < reslist.
size()
; i++
)return resarr;
}
逐步合併上面一種方式是先把兩邊不重合的新增到集合list中,之後在合併中間的。這裡還可以從左邊開始把不重合的(如果有不重合的)新增到集合list中,如果遇到重合的就找出重合的範圍然後再新增到集合中,最後再把後面不重合的(如果有)新增到集合list中。
public
int[
]insert
(int
intervals,
int[
] newinterval)
//然後再把重合的新增到list中
reslist.
add(
newint
);//把剩下的在新增到集合list中
while
(i < intervals.length)
reslist.
add(intervals[i++])
;//這一大坨是把list轉二維陣列
int[
] resarr =
newint
[reslist.
size()
][2]
;for
(int j =
0; j < reslist.
size()
; j++
)return resarr;
}
總結這題難度不是很大,但一次寫出來不出錯比較困難,因為他有很多邊界條件的判斷。
56 57 合併區間 插入區間
給出乙個區間的集合,請合併所有重疊的區間。直接對區間起點進行排序,然後遍歷,判斷當前遍歷區間的起點是否在前一區間內,在的話,更新前一區間的終點為兩者終點最大值,不在的話直接將當前區間插入。class solution sort intervals.begin intervals.end const ...
LintCode 插入區間
給出乙個無重疊的按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 樣例 插入區間 2,5 到 1,2 5,9 我們得到 1,9 插入區間 3,4 到 1,2 5,9 我們得到 1,2 3,4 5,9 definition o...
57 插入區間
發現這個題目變簡潔了。區間直接以二維陣列的形式給出,而不是自己定義的資料結構,所以不需要自己寫排序函式了。給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,...