Java-LeetCode57. 插入区间-滑动窗口

插入区间

http://www.nowcoder.com/questionTerminal/02418bfb82d64bf39cd76a2902db2190

  • 算法
    • 1.把前面不能和新插入区间合并的区间添加到结果:区间的右侧小于新插入区间的左侧
    • 2.把中间可以和新插入区间合并的区间与新插入区间合并
      • 区间的右侧大于等于新插入区间的左侧
      • 区间的左侧小于等于新插入区间的右侧
    • 3.把后面不能和新插入区间合并的区间添加到结果
public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
    ArrayList<Interval> result = new ArrayList<>(10);
    int i = 0;
    while (i < intervals.size() && intervals.get(i).end < newInterval.start) {
        result.add(intervals.get(i++));
    }
    while (i < intervals.size() && intervals.get(i).start <= newInterval.end) {
        newInterval = new Interval(Math.min(intervals.get(i).start, newInterval.start),
                                  Math.max(intervals.get(i).end, newInterval.end));
        i++;
    }
    result.add(newInterval);
    while (i < intervals.size()) {
        result.add(intervals.get(i++));
    }
    return result;
}

public int[][] insert(int[][] intervals, int[] newInterval) {
    ArrayList<int[]> list = new ArrayList<>(10);
    int i = 0;
    while (i < intervals.length && intervals[i][1] < newInterval[0]) {
        list.add(intervals[i++]);
    }
    while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
        newInterval = new int[]{
            Math.min(newInterval[0], intervals[i][0]),
            Math.max(newInterval[1], intervals[i][1])};
        i++;
    }
    list.add(newInterval);
    while (i < intervals.length) {
        list.add(intervals[i++]);
    }
    int[][] result = new int[list.size()][];
    for (int j = 0; j < list.size(); j++) {
        result[j] = list.get(j);
    }
    return result;
}
LeetCode题解 文章被收录于专栏

测试

全部评论

相关推荐

dian3b:挺妙的,如果上纲上线显得不合人心,但是这样以来既能监督适当摸鱼,也有一定的人文关怀。
摸鱼被leader发现了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务