合并区间,对象比较大小,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;    
                
    }
}
posted @ 2022-11-12 21:03  northli  阅读(28)  评论(0编辑  收藏  举报