首页 > 其他 > 详细

[LeetCode]Insert Interval

时间:2015-03-25 19:23:29      阅读:229      评论:0      收藏:0      [点我收藏+]
题意分析:想一堆区间中插入一个新的区间,返回之后的分布情况
我的思路是先找到新区间的start 然后在找到他的结束点代码如下,复杂度O(N):

    public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
        if (newInterval == null)
            return intervals;
        if (intervals.size() == 0) intervals.add(newInterval);
        List<Interval> rsIntervals = new LinkedList<Interval>();
        if (intervals == null) {
            rsIntervals.add(newInterval);
        } else {
            int start = newInterval.start;
            int end = newInterval.end;
            Interval interval = null;
            for (int i = 0; i < intervals.size(); ++i) {
                interval = intervals.get(i);
                if (start <= interval.end) {
                    Interval in = new Interval();
                    if (start < interval.start) {
                        in.start = start;//起始
                    } else {
                        in.start = interval.start;
                    }
                    i = getEndANDNextInterval(intervals, rsIntervals, newInterval.end, i, in);
                    while (i < intervals.size()) {
                        rsIntervals.add(intervals.get(i));
                        i++;
                    }
                    return rsIntervals;
                } else {
                    rsIntervals.add(interval);
                    if (i + 1 >= intervals.size()) {
                        rsIntervals.add(newInterval);
                    }
                }
            }


        }
        return rsIntervals;

    }

    /**
     * @param intervals
     * @param end
     * @param istart
     * @param interval
     * @return
     */
    public int getEndANDNextInterval(List<Interval> intervals, List<Interval> rsIntervals, int end, int istart, Interval interval) {
        int index = 0;
        Interval in = null;
        for (int i = istart; i < intervals.size(); ++i) {
            in = intervals.get(i);
            if (end < in.start) {
                interval.end = end;
                rsIntervals.add(interval);
                return i;
            }
            if (end <= in.end) {
                interval.end = in.end;
                rsIntervals.add(interval);
                return i + 1;
            } else {
                i++;
                while (i < intervals.size()) {
                    in = intervals.get(i);
                    if (end < in.start) {
                        interval.end = end;
                        rsIntervals.add(interval);
                        return i;
                    } else if (end <= in.end) {
                        interval.end = in.end;
                        rsIntervals.add(interval);
                        return i + 1;
                    }
                    i++;
                }
                interval.end = end;//全包涵后面的元素
                rsIntervals.add(interval);
                return i;
            }
        }
        return index;
    }
别人家的简洁版做法:
public class Solution {
    public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
        if (newInterval == null || intervals == null) {
            return intervals;
        }

        ArrayList<Interval> results = new ArrayList<Interval>();
        int insertPos = 0;

        for (Interval interval : intervals) {
            if (interval.end < newInterval.start) {
                results.add(interval);
                insertPos++;
            } else if (interval.start > newInterval.end) {
                results.add(interval);
            } else {
                newInterval.start = Math.min(interval.start, newInterval.start);
                newInterval.end = Math.max(interval.end, newInterval.end);
            }
        }

        results.add(insertPos, newInterval);

        return results;
    }
}



[LeetCode]Insert Interval

原文:http://blog.csdn.net/youmengjiuzhuiba/article/details/44625289

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!