合并区间,对象比较大小,int compare(T a, T b)返回值位负数,则认为a小,否则a大
 
import java.util.*;
/**
 * 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 ArrayList<Interval> merge(ArrayList<Interval> intervals) {
        //区间按照起点升序排序
        //取出A中第一个区间存入B
        //取出B的最后一个区间和A的二个区间比较,局部最优解存入B
        //取出B的最后一个区间和A的三个区间比较,局部最优解存入B
        //取出B的最后一个和A的第四个比较,局部最优解存入B
        //取出B的最后一个区间和A的第五个比较,局部最优解存入B
        Collections.sort(intervals, new Comparator<Interval>(){
            public int compare(Interval o1, Interval o2){
                if(o1.start != o2.start)
                    return o1.start - o2.start;
                else
                    return o1.end - o2.end;
            }
        });
        ArrayList<Interval> re_list = new ArrayList<Interval>();
        if(intervals.size()==0){
            return re_list;
        }
        re_list.add(intervals.get(0));
        for(int i=1; i<intervals.size(); i++){
            //临时A,可能有问题
            Interval A = re_list.get(re_list.size()-1);
            re_list.remove(re_list.size()-1);
            //临时B,可能有问题
            Interval B = intervals.get(i);
            if(A.end<B.start){
                re_list.add(A);
                re_list.add(B);
            }else if(A.end>=B.start){
                if(A.end>B.end){
                    A.end = A.end;
                }else{
                    A.end = B.end;
                }
                re_list.add(A);
            }
        }    
        return re_list;    
    }
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号