LeetCode-插入区间

135 阅读1分钟

算法记录

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;
    }
}

总结

编码能力,注意边界条件的区分。