[LeetCode] 57. Insert Interval 插入區間

Jay_1998發表於2020-09-28

[LeetCode] 57. Insert Interval 插入區間

給出一個無重疊的 ,按照區間起始端點排序的區間列表。

在列表中插入一個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)

Example1:

輸入:intervals = [[1,3],[6,9]], newInterval = [2,5]
輸出:[[1,5],[6,9]]

Example2:

輸入: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] 重疊。

大致思路

用一個變數 cur 來遍歷區間,如果當前 cur 區間的結束位置小於要插入的區間的起始位置的話,說明沒有重疊,則將 cur 區間加入結果 res 中,然後 cur 自增1。直到有 cur 越界或有重疊 while 迴圈退出,然後再用一個 while 迴圈處理所有重疊的區間,每次用取兩個區間起始位置的較小值,和結束位置的較大值來更新要插入的區間,然後 cur 自增1。

AC程式碼

	int n = intervals.size();
		int cur = 0;
		vector<vector<int>> res;
		while (cur < n&&intervals[cur][1] < newInterval[0])
		{
			res.push_back(intervals[cur]);
			cur++;

		}
		while (cur < n&&intervals[cur][0] <= newInterval[1])
		{
			newInterval[0] = min(newInterval[0], intervals[cur][0]);
			newInterval[1] = max(newInterval[1], intervals[cur][1]);
			++cur;
		}
		res.push_back(newInterval);
		while (cur < n)
		{
			res.push_back(intervals[cur]);
			cur++;
		}
		return res;

相關文章