給你一個?無重疊的?,按照區(qū)間起始端點排序的區(qū)間列表。
在列表中插入一個新的區(qū)間,你需要確保列表中的區(qū)間仍然有序且不重疊(如果有必要的話,可以合并區(qū)間)。
示例 1:
輸入:intervals = [[1,3],[6,9]], newInterval = [2,5] 輸出:[[1,5],[6,9]]
示例 2:
輸入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8] 輸出:[[1,2],[3,10],[12,16]] 解釋:這是因為新的區(qū)間[4,8]
與[3,5],[6,7],[8,10]
重疊。
示例 3:
輸入:intervals = [], newInterval = [5,7] 輸出:[[5,7]]
示例 4:
輸入:intervals = [[1,5]], newInterval = [2,3] 輸出:[[1,5]]
示例 5:
輸入:intervals = [[1,5]], newInterval = [2,7] 輸出:[[1,7]]
提示:
0 <= intervals.length <= 104
intervals[i].length == 2
0 <= intervals[i][0] <= intervals[i][1] <= 105
-
intervals
?根據?intervals[i][0]
?按?升序?排列 newInterval.length == 2
0 <= newInterval[0] <= newInterval[1] <= 105
思路:
文章來源:http://www.zghlxwxcb.cn/news/detail-680160.html
跟之前的同向指針一樣,只要互不重疊的情況下,就要看需要插入的區(qū)間是否在已有的區(qū)間內,判斷的標準則是看插入的區(qū)間左邊界是否有小于某個區(qū)間的右邊界,如果有則合并。并且記錄更大的右邊界。文章來源地址http://www.zghlxwxcb.cn/news/detail-680160.html
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
int left = newInterval[0];
int right = newInterval[1];
boolean placed = false;
List<int[]> ansList = new ArrayList<int[]>();
for (int[] interval : intervals) {
if (interval[0] > right) {
// 在插入區(qū)間的右側且無交集
if (!placed) {
ansList.add(new int[]{left, right});
placed = true;
}
ansList.add(interval);
} else if (interval[1] < left) {
// 在插入區(qū)間的左側且無交集
ansList.add(interval);
} else {
// 與插入區(qū)間有交集,計算它們的并集
left = Math.min(left, interval[0]);
right = Math.max(right, interval[1]);
}
}
if (!placed) {
ansList.add(new int[]{left, right});
}
int[][] ans = new int[ansList.size()][2];
for (int i = 0; i < ansList.size(); ++i) {
ans[i] = ansList.get(i);
}
return ans;
}
}
到了這里,關于每日一題:leetcode 57 插入區(qū)間的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!