• [x] ### PriorityQueue
  • [x] ### 扫描线 最优秀
  • Time O(nlogn)排序

56.Merge Intervals

Given a collection of intervals, merge all overlapping intervals.

For example,
Given[1,3],[2,6],[8,10],[15,18],
return[1,6],[8,10],[15,18].

并不能保证第一个元素有序

并不能保证第二个元素也有序

我用了个priority queue

/**
 * 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; }
 * }
 */
class Solution {
    public List<Interval> merge(List<Interval> intervals) {
        if (intervals == null || intervals.size() <= 1) {
            return intervals;
        }
        List<Interval> ans = new ArrayList<Interval>();
        PriorityQueue<Interval> queue = new PriorityQueue<>(intervals.size() , (a, b) -> (a.start - b.start));
        for (Interval inter : intervals) {
            queue.offer(inter);
        }
        Interval prev = null;
        Interval curt = null;

        while (!queue.isEmpty()) {
            if (prev == null) {
                prev = queue.poll();
                ans.add(prev);
                continue;
            }
            prev = ans.get(ans.size() - 1);
            curt = queue.poll();
            // [ 0, 5] [1 , 4]
            if (curt.start > prev.end) {
                ans.add(curt);
            }else{
                prev.end = (prev.end < curt.end) ? curt.end : prev.end;
            }
        }
        return ans;
    }
}
// //           |___|      |_____|
//                |_____|     |_______|
class Solution {
    public List<Interval> merge(List<Interval> intervals) {
        if (intervals == null || intervals.size() <= 1) {
            return intervals;
        }
        List<Interval> ans = new ArrayList<Interval>();
        Collections.sort(intervals, (a,b) -> (a.start - b.start));
        int start = intervals.get(0).start;
        int end = intervals.get(0).end;
        for (Interval interval : intervals) {
            if (interval.start <= end) {
                end = Math.max(end, interval.end);
            }else{
                ans.add(new Interval(start, end));
                start = interval.start;
                end = interval.end;
            }
        }
        ans.add(new Interval(start,end));
        return ans;
    }
}

results matching ""

    No results matching ""