算法记录
LeetCode 题目:
给你一个 无重叠的 , 按照区间起始端点排序的区间列表。
说明
一、题目
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
二、分析
- 给出的数组已经是经过排序的,我们只需要遍历整个数组,将所有在新增加元素范围之内的进行删除,在空缺位置添加新的元素。
- 需要注意和当前元素相交但是不全是子集的数组,要更新新元素的左边界为左相交的最小值,右边界为又相交的最大值。
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
int index = 0, left = newInterval[0], right = newInterval[1];
List<int[]> ret = new ArrayList();
while(index < intervals.length && intervals[index][1] < left) {
ret.add(intervals[index++]);
}
if(index < intervals.length && intervals[index][0] < newInterval[0]) newInterval[0] = intervals[index][0];
while(index < intervals.length && intervals[index][0] <= right) index++;
if(index >= 1 && intervals[index - 1][1] >= newInterval[1]) newInterval[1] = intervals[index - 1][1];
ret.add(newInterval);
while(index < intervals.length) {
ret.add(intervals[index++]);
}
int[][] ans = new int[ret.size()][2];
for(int i = 0; i < ret.size(); i++) ans[i] = ret.get(i);
return ans;
}
}
总结
编码能力,注意边界条件的区分。