986. Interval List Intersections
Posted wentiliangkaihua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了986. Interval List Intersections相关的知识,希望对你有一定的参考价值。
Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order.
Return the intersection of these two interval lists.
(Formally, a closed interval [a, b]
(with a <= b
) denotes the set of real numbers x
with a <= x <= b
. The intersection of two closed intervals is a set of real numbers that is either empty, or can be represented as a closed interval. For example, the intersection of [1, 3] and [2, 4] is [2, 3].)
Example 1:
Input: A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]]
Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
Reminder: The inputs and the desired output are lists of Interval objects, and not arrays or lists.
Note:
0 <= A.length < 1000
0 <= B.length < 1000
0 <= A[i].start, A[i].end, B[i].start, B[i].end < 10^9
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
class Solution { public int[][] intervalIntersection(int[][] A, int[][] B) { Arrays.sort(A, (a, b)->a[0]-b[0]);//可以不要 Arrays.sort(B, (a, b)->a[0]-b[0]); if(A.length == 0 || B.length == 0) return new int[][]{}; List<int[]> list = new ArrayList(); for(int i = 0; i < A.length; i++){ int[] t1 = A[i]; for(int j = 0; j < B.length; j++){ int[] t2 = B[j]; if(t1[1] < t2[0] || t1[0] > t2[1]) continue; int[] k = new int[2]; k[0] = Math.max(t1[0], t2[0]); k[1] = Math.min(t1[1], t2[1]); list.add(k); } } int[][] result = new int[list.size()][2]; for(int i = 0; i < list.size(); i++) result[i] = list.get(i); return result; } }
似曾相识啊,跟merge intervals挺像的,先跳过不可能的情况,然后把合适的插入即可
class Solution { public int[][] intervalIntersection(int[][] A, int[][] B) { List<int[]> ans = new ArrayList(); int i = 0, j = 0; while (i < A.length && j < B.length) { // Let‘s check if A[i] intersects B[j]. // lo - the startpoint of the intersection // hi - the endpoint of the intersection int lo = Math.max(A[i][0], B[j][0]); int hi = Math.min(A[i][1], B[j][1]); if (lo <= hi) ans.add(new int[]{lo, hi}); // Remove the interval with the smallest endpoint if (A[i][1] < B[j][1]) i++; else j++; } return ans.toArray(new int[ans.size()][]); } }
优化之后
以上是关于986. Interval List Intersections的主要内容,如果未能解决你的问题,请参考以下文章
986. Interval List Intersections
leetcode986. Interval List Intersections