领扣LintCode算法问题答案-295. 交集

领扣LintCode算法问题答案-295. 交集

295. 交集

描述

给定两个排序后的区间序列,序列内每个区间两两互不相交,返回两个序列相交的区间的下标

  • 1 <= len(a),len(b) <= 1e5
  • abs(max(a)) <= 1e9

样例 1:

输入: 
	a = [[0,3], [7,10]] , b = [[-1,1],[2,8]]
输出: 
	ans = [[0,0],[0,1],[1,1]]

原题链接点这里

题解

public class Solution {
    /**
     * @param a: first sequence
     * @param b: second sequence
     * @return: return ans
     */
    public List<List<Integer>> Intersection(List<List<Integer>> a, List<List<Integer>> b) {
        // write your code here
        
        List<List<Integer>> ret = new ArrayList<>();

		if (a == null
			|| b == null
			|| a.isEmpty()
			|| b.isEmpty()) {
			return ret;
		}

		Iterator<List<Integer>> iteratorA = a.iterator();
		Iterator<List<Integer>> iteratorB = b.iterator();

		List<Integer> rowA = iteratorA.next();
		List<Integer> rowB = iteratorB.next();

		int indexA = 0;
		int indexB = 0;

		int a0 = rowA.get(0);
		int a1 = rowA.get(1);
		int b0 = rowB.get(0);
		int b1 = rowB.get(1);
		
		while (true) {

			if ((a0 >= b0
					&& a0 <= b1)
				|| (b0 >= a0
					&& b0 <= a1)) {
				List<Integer> r = new ArrayList<>();
				r.add(indexA);
				r.add(indexB);
				ret.add(r);
			}
			
			if (a1 <= b1
				&& iteratorA.hasNext()) {
				++indexA;
				rowA = iteratorA.next();
				a0 = rowA.get(0);
				a1 = rowA.get(1);
			} else if (b1 <= a1 && iteratorB.hasNext()) {
				++indexB;
				rowB = iteratorB.next();
				b0 = rowB.get(0);
				b1 = rowB.get(1);
			} else {
				return ret;
			}
		}
    }
}

鸣谢

非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。

©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页