Leetcode025--合并区间

一、原题



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]



一、中文



给定一个区间集合,合并有重叠的区间。 



三、举例



比如区间1、3和区间2、6合并之后的最终结果是,1、6


四、思路



先对区间进行排序,按开始点进行排序,再一个一个进行合并,注意的是这里的排序算法使用的思一个类匿名内部类的一个方法进行的sort排序



五、程序


个进行合并
package code;

import java.util.*;

class Interval { 
	int start; 
	int end; 
	Interval(){
		start = 0;
		end = 0;
	} 
	Interval(int s, int e){
		start = s;
		end = e;
	}
}

public class LeetCode31{
	public static void main(String args[]){

		List num = new ArrayList();
		Interval in1 = new Interval(1, 3);
		Interval in2 = new Interval(2, 6);
		Interval in3 = new Interval(8, 10);
		Interval in4 = new Interval(13, 20);
		num.add(in1);
		num.add(in2);
		num.add(in3);
		num.add(in4);
		
		List list = merge(num);
		
		Iterator it = list.iterator();
		while(it.hasNext()){
			Interval iter = it.next();
			System.out.print(iter.start+" ");
			System.out.print(iter.end+" ");
		}
		
	}
	

	
    public static List merge(List intervals) {
        List result = new LinkedList<>();

        if (intervals == null || intervals.size() < 1) {
            return result;
        }

        // 先对区间进行排序,使用一个匿名内部类
        Collections.sort(intervals, new Comparator() {
            public int compare(Interval o1, Interval o2) {
                return o1.start - o2.start;
            }
        });

        //遍历所有元素
        Interval pre = null;
        for (Interval i : intervals) {
        	//如果前面元素的末尾小于后边元素的开始,这是正常的情况
            if (pre == null || pre.end < i.start) {
                result.add(i);
                pre = i;
            } else if (pre.end < i.end) {
            	//如果不是正常的情况并且后边末尾元素比前边的末尾元素大
                pre.end = i.end;
            }
        }

        return result;
    }
	
}
	


你可能感兴趣的:(【LeetCode】)