【LeetCode-面試算法經典-Java實現】【056-Merge Intervals(區間合並)】
阿新 • • 發佈:2017-06-28
解題思路 結果 led data- javascrip res 一段 元素 轉載
【056-Merge Intervals(區間合並)】
【LeetCode-面試算法經典-Java實現】【全部題目文件夾索引】
原題
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
題目大意
給定一個區間集合,合並有重疊的區間。
解題思路
先對區間進行排序。按開始點進行排序,再一個一個進行合並。
代碼實現
算法實現類
import java.util.*;
public class Solution {
public List<Interval> merge(List<Interval> intervals) {
List<Interval> result = new LinkedList<>();
if (intervals == null || intervals.size() < 1) {
return result;
}
// 先對區間進行排序,使用一個匿名內部類
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
return o1.start - o2.start;
}
});
// 排序後,後一個元素(記為next)的start一定是不小於前一個(記為prev)start的,
// 對於新加入的區間,假設next.start大於prev.end就說明這兩個區間是分開的,要添
// 加一個新的區間。否則說明next.start在[prev.start, prev.end]內。則僅僅要看
// next.end是否是大於prev.end,假設大於就要合並區間(擴大)
Interval prev = null;
for (Interval item : intervals) {
if (prev == null || prev.end < item.start) {
result.add(item);
prev = item;
} else if (prev.end < item.end) {
prev.end = item.end;
}
}
return result;
}
}
評測結果
點擊圖片。鼠標不釋放,拖動一段位置,釋放後在新的窗體中查看完整圖片。
特別說明
歡迎轉載,轉載請註明出處【http://blog.csdn.net/derrantcm/article/details/47120501】
【LeetCode-面試算法經典-Java實現】【056-Merge Intervals(區間合並)】