要找出 A 與 B 的區間,因為不一定會按順序交疊,所以用 indexA , indexB 來記錄目前 Traverse 的位置。
如果有交疊,範圍會是從二者的左側取大,右側取小的範圍。
那要怎麼移動 index ?
如果有一個的右側很大,對方的下一個右側可能還沒超過它。因此,此時應該是要繼續移動右側較小的。
Python
class Solution: def intervalIntersection(self, A: List[List[int]], B: List[List[int]]) -> List[List[int]]: ia = ib = 0 na = len(A) nb = len(B) result = [] while ia < na and ib < nb: if A[ia][1] < B[ib][0] or A[ia][0] > B[ib][1]: pass #continue else: l = max(A[ia][0], B[ib][0]) r = min(A[ia][1], B[ib][1]) result.append([l, r]) if A[ia][1] < B[ib][1]: ia += 1 else: ib += 1 return resultC#
public class Solution { public int[][] IntervalIntersection(int[][] A, int[][] B) { int idxA = 0; int idxB = 0; var result = new List(); while(idxA < A.Length && idxB < B.Length) { int l = Math.Max(A[idxA][0], B[idxB][0]); int r = Math.Min(A[idxA][1], B[idxB][1]); if(l <= r) { result.Add(new int[2]{l, r}); } if(A[idxA][1] <= B[idxB][1]) { idxA += 1; } else { idxB += 1; } } return result.ToArray(); } }