懒人读算法(三)-添加新区间

来源:互联网 发布:mac book air能吃鸡吗 编辑:程序博客网 时间:2024/05/27 14:13
// Example 1:// Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].// Example 2:// Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].// This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

假设输入的原先区间是有序的

答案:

/** * Definition for an interval. * public class Interval { *     int start; *     int end; *     Interval() { start = 0; end = 0; } *     Interval(int s, int e) { start = s; end = e; } * } */public class Solution {    public List<Interval> insert(List<Interval> intervals, Interval newInterval) {        int i = 0;        while(i < intervals.size() && intervals.get(i).end < newInterval.start) i++;//如果列表的第一个区间得最后一个值比新区间第一个值要小,则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));//取当前区间和新区间的最小开始,和最大结束            intervals.remove(i);//原先的区间去除        }        intervals.add(i, newInterval);//添加新的区间        return intervals;    }}

代码解析:抓住题目的业务逻辑信息,写出代码来并不难.
核心思想:遍历原先列的所有区间,取当前区间和新区间的最小开始,和最大结束
核心代码:

   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));//取当前区间和新区间的最小开始,和最大结束            intervals.remove(i);//原先的区间去除        }
阅读全文
1 0
原创粉丝点击