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; } }
原文:http://blog.csdn.net/youmengjiuzhuiba/article/details/44625289