May LeetCoding Challenge23 之 双指针法、ArrayList转数组

本题使用双指针法。如果A[0]的端点最小,则它只能与B[0]相交。之后,我们可以丢弃A[0],因为它无法与其他任何东西相交。 类似地,如果B[0]的端点最小,则它只能与A[0]相交,并且我们可以在之后丢弃B[0],因为它无法与其他任何相交。 我们使用两个指针i和j来虚拟地重复管理“丢弃” A[0]或B[0]。

语法补充:List转数组

//一维
List<String> testList1 = new ArrayList<>();
String[] array1 = testList1.toArray(new String[testList1.size()]);

//二维
List<int[]> testList2 = new ArrayList<>();
int[][] array2 = testList2.toArray(new int[testList2.size()][]);

JAVA

class Solution {
    public int[][] intervalIntersection(int[][] A, int[][] B) {
        List<int[]> res = new ArrayList<>();
        int i = 0;
        int j = 0;
        while(i < A.length && j < B.length){
            int low = Math.max(A[i][0], B[j][0]);
            int high = Math.min(A[i][1], B[j][1]);
            if(low <= high){
                res.add(new int[]{low, high});
            }
            if(A[i][1] < B[j][1]) i++;
            else j++;
        }
        //List转二维数组
        return res.toArray(new int[res.size()][]);
    }
}

Python

class Solution:
    def intervalIntersection(self, A: List[List[int]], B: List[List[int]]) -> List[List[int]]:
        res = []
        i = 0
        j = 0
        while i < len(A) and j < len(B):
            low = max(A[i][0], B[j][0])
            high = min(A[i][1], B[j][1])
            if low <= high:
                res.append([low,high])
            if A[i][1] < B[j][1]:
                i += 1
            else:
                j += 1
        return res

猜你喜欢

转载自www.cnblogs.com/yawenw/p/12952983.html