Change end in-place
Given [1,3][2,6][8,10][15,18]
return [1,6],[8,10],[15,18]
2 .Implementation
Q1: sort ?
A1: sort the intervals int[][2] X, List<Interval>
Q1: after sorting , how to do the merge ? Detect Merge?
A1: previous's end is larger than next's start, create a new Interval to merge with start from previous's start and end from next's end. list Add and Remove
Q1: Comparator
A1: interface using implement keyword, class using extend keyword
Comparator<T> comp = new Comparator<T>()
{
@Override
public int compare(T t1, T t2)
{
return t1.data - t2.data;
}
};
Collections.sort( DS, comparator)??
// NOTE:
if (res.get(res.size()-1).end >= intervals.get(i).start )
{
//Interval item = new Interval(intervals.get(i).start, intervals.get(i+1).end);
//res.add(item);
//i++;
res.get(res.size()-1).end = Math.max(res.get(res.size()-1).end ,intervals.get(i).end);
}
[sort] Sort Color
[sort] Sort List
/* Time:O(nlogn+n), Space:O(1) Input: [[1,3]] Output: [] Expected: [[1,3]] Input: [[1,4],[5,6]] Output: [[1,4]] Expected: [[1,4],[5,6]] http://codeganker.blogspot.com/2014/03/merge-intervals-leetcode.html */ public class Solution { public List3. Similar onesmerge(List intervals) { List res = new ArrayList (); // validate the input if (intervals == null || intervals.size() == 0 ) return res; // Comparator is a class Comparator comp = new Comparator () { @Override public int compare(Interval a, Interval b) { // NOTE: start are the same if (a.start == b.start) return a.end - b.end; // means a.end < b.end => return -1 return a.start - b.start; } }; //Collections.sort(intervals, new IntervalComparator()); Collections.sort(intervals, comp); //for ( int i =0 ; i < intervals.size() -1 ;i++) res.add(intervals.get(0)); for (int i = 1; i < intervals.size(); i++) { //if ( intervals.get(i).end >= intervals.get(i+1).start ) if (res.get(res.size()-1).end >= intervals.get(i).start ) { //Interval item = new Interval(intervals.get(i).start, intervals.get(i+1).end); //res.add(item); //i++; res.get(res.size()-1).end = Math.max(res.get(res.size()-1).end ,intervals.get(i).end); } else { res.add(intervals.get(i)); } } return res; } } //public int IntervalComparator(Interval a, Interval b) implements //Comparator //{ // if (a.start < b.start) // return -1; // else // return 1; //}
[sort] Sort Color
[sort] Sort List
No comments:
Post a Comment