题解 | #合并区间#Java 97% 用栈中转好理解

合并区间

http://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a

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) {
        Collections.sort(intervals,new Comparator<Interval>(){
            @Override
            public int compare(Interval o1, Interval o2){
                if(o1.start != o2.start){
                    return o1.start - o2.start;
                }
                else
                    return o1.end - o2.end;
            }
        });
        Stack<Interval> stack = new Stack<>();
        for(int i = 0; i < intervals.size(); i++){
            if(stack.isEmpty()){
                stack.push(intervals.get(i));
            }else{
                Interval t = stack.peek();
                if(t.end >= intervals.get(i).start){
                    stack.pop();
                    stack.push(getnew(t,intervals.get(i)));
                }else{
                    stack.push(intervals.get(i));
                }
            }
        }
        ArrayList<Interval> res = new ArrayList<>(stack);
        return res;
    }
    Interval getnew(Interval i1, Interval i2){
        int start = Math.min(i1.start, i2.start);
        int end = Math.max(i1.end,i2.end);
        return new Interval(start,end);
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务