LeetCode_56---Merge Intervals

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].

Hide Tags
  Array Sort

Code:


/**
 * 
 */
package From41;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

/**
 * @author MohnSnow
 * @time 2015年6月26日 下午2:38:46
 * 
 */
public class LeetCode56 {

	/**
	 * @param argsmengdx
	 *            -fnst
	 */
	public static class Interval {
		int	start;
		int	end;

		Interval() {
			start = 0;
			end = 0;
		}

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

		public String toString() {
			String result = "start:" + start + " end: " + end;
			return result;
		}
	}

	// Time Limit Exceeded
	public static List<Interval> merge(List<Interval> intervals) {
		Interval temp;
		List<Interval> result = new LinkedList<Interval>();
		if (intervals.size() <= 1) {
			return intervals;
		}
		for (int i = intervals.size() - 1; i > 0; i--) {//复杂度太高
			for (int j = 0; j < i; j++) {
				if (intervals.get(i).start < intervals.get(j).start) {
					int tempInt = intervals.get(i).start;
					intervals.get(i).start = intervals.get(j).start;
					intervals.get(j).start = tempInt;
					tempInt = intervals.get(i).end;
					intervals.get(i).end = intervals.get(j).end;
					intervals.get(j).end = tempInt;
				}
			}
		}
		temp = new Interval(intervals.get(0).start, intervals.get(0).end);
		for (int i = 1; i < intervals.size(); i++) {
			if (temp.end >= intervals.get(i).start && temp.end < intervals.get(i).end) {
				temp.end = intervals.get(i).end;
			}
			if (temp.end < intervals.get(i).start) {
				result.add(temp);
				temp.start = intervals.get(i).start;//出错地方,这个地方我就先不改了
				temp.end = intervals.get(i).end;//出错地方,这个地方我就先不改了,造成了intervals里面的变化
			}
		}
		result.add(temp);
		return result;
	}

	//440msAC
	public static List<Interval> merge1(List<Interval> intervals) {
		List<Interval> result = new ArrayList<Interval>();
		if (intervals.size() <= 1) {
			return intervals;
		}
		Collections.sort(intervals, new Comparator<Interval>() {//借鉴下面方式
					@Override
					public int compare(Interval obj0, Interval obj1) {
						return obj0.start - obj1.start;
					}
				});
		Interval temp = null;
		for (int i = 0; i < intervals.size(); i++) {
			if (temp == null || temp.end < intervals.get(i).start) {
				result.add(intervals.get(i));
				temp = intervals.get(i);
			} else if (temp.end >= intervals.get(i).start && temp.end < intervals.get(i).end) {
				temp.end = intervals.get(i).end;
			}
		}
		return result;
	}

	//https://leetcode.com/discuss/33434/a-clean-java-solution
	//提供了一种排序方式
	public static List<Interval> merge2(List<Interval> intervals) {
		Collections.sort(intervals, new Comparator<Interval>() {
			@Override
			public int compare(Interval obj0, Interval obj1) {
				return obj0.start - obj1.start;
			}
		});

		List<Interval> ret = new ArrayList<>();
		Interval prev = null;
		for (Interval inter : intervals) {
			if (prev == null || inter.start > prev.end) {
				ret.add(inter);
				prev = inter;
			} else if (inter.end > prev.end) {
				// Modify the element already in list
				prev.end = inter.end;
			}
		}
		return ret;
	}

	public static void main(String[] args) {
		Interval a = new Interval(1, 4);
		Interval b = new Interval(5, 6);
		//Interval c = new Interval(9, 19);
		//Interval d = new Interval(15, 18);
		List<Interval> intervals = new LinkedList<Interval>();
		intervals.add(a);
		intervals.add(b);
		//intervals.add(c);
		//intervals.add(d);

		System.out.println("merge: " + merge(intervals));
		System.out.println("merge1: " + merge1(intervals));
		System.out.println("merge2: " + merge2(intervals));
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值