时间交集 --- lintcode 821

点击打开原题


已知:

原题题意是,给定两个集合,每个集合中有类似 [1,2] 这样的时间段,找出两个集合中共同的时间段,比如说集合一包含 [1,10] ,集合二包含 [2,11] , 则结果肯定包含 [2,10]


思路:

题目特意表明了不存在非法时间段,且本身已经按照顺序给出。思路就是,两个集合进行遍历,集合A的元素和集合B的元素但凡有共同时间的,就输出,将所有输出汇总,就是最终答案。


/**
 * Definition of Interval:
 * public classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this.start = start;
 *         this.end = end;
 *     }
 */
public class Solution {
    /**
     * @param seqA: the list of intervals
     * @param seqB: the list of intervals
     * @return: the time periods
     */
    public List<Interval> timeIntersection(List<Interval> seqA,
			List<Interval> seqB) {
		List<Interval> ret = new ArrayList<Interval>();
		for (Interval i1 : seqA) {
			for (Interval i2 : seqB) {
				Interval i = calculate(i1, i2);
				if (!(i.start == 0 && i.end == 0)) {
					ret.add(i);
				}
			}
		}

		return ret;
	}

	private Interval calculate(Interval i1, Interval i2) {
		if (i1.start > i2.end || i1.end < i2.start) {
			return new Interval(0, 0);
		}
		return new Interval(i1.start > i2.start ? i1.start : i2.start,
				i1.end < i2.end ? i1.end : i2.end);
	}
}

猜你喜欢

转载自blog.csdn.net/mio_bass/article/details/79497168