题解 | #合并区间#

合并区间

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

import java.util.*;

/*
 * public class Interval {
 *   int start;
 *   int end;
 *   public Interval(int start, int end) {
 *     this.start = start;
 *     this.end = end;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param intervals Interval类ArrayList 
     * @return Interval类ArrayList
     */
    public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
        // write code here
        if(intervals.isEmpty()){
            return intervals;
        }
		// 按起始元素排序
        intervals.sort(new Comparator<Interval>() {
            @Override
            public int compare(Interval interval, Interval t1) {
                return interval.start - t1.start;
            }
        });
        ArrayList<Interval> result = new ArrayList<>();
	  	// 第一个元素无需对比
        result.add(intervals.get(0));
        for (int i = 1; i < intervals.size(); i++) {
		  	// 将结果集里最新元素与当前元素对比
            Interval cur = intervals.get(i);
            Interval latest = result.get(result.size()-1);
            if (cur.start>latest.end){
			  	// 当前起始元素大于结果集最新结束元素时,无交集,直接加入结果集
                result.add(cur);
            } else {
			  	// 当前起始元素小于结果集最新结束元素时,有交集,结束值等于两个元素中最大的
                latest.end = Math.max(cur.end,latest.end);
            }
        }
        return result;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务