力扣刷题日记-1213. 三个有序数组的交集

348 阅读1分钟

给出三个均为 严格递增排列 的整数数组 arr1arr2 和 arr3。返回一个由  在这三个数组中 同时出现 的整数所构成的有序数组。

思路:

  • 1.题目明确说了[严格递增排序],那么凸出的两端的肯定不是三个数组共有的
  • 2.用三指针的思路尽量让三个数组的值到达同一级别
  • 3.找到三个数组中开头较大的开头作为max,其他较小的直接削掉(跳过)不做判断


/**
 * @param {number[]} arr1
 * @param {number[]} arr2
 * @param {number[]} arr3
 * @return {number[]}
 */
var arraysIntersection = function (arr1, arr2, arr3) {
    let p1 = 0, p2 = 0, p3 = 0, ans = []
    l1 = arr1.length, l2 = arr2.length, l3 = arr3.length;
    while (p1 < l1 && p2 < l2 && p3 < l3) {
        if (arr1[p1] == arr2[p2] && arr1[p1] == arr3[p3]) {
            ans.push(arr1[p1])
            p1++
            p2++
            p3++
        } else {
            let max = Math.max(Math.max(arr1[p1], arr2[p2]), arr3[p3])
            if (arr1[p1] < max) {
                p1++
            }
            if (arr2[p2] < max) {
                p2++
            }
            if (arr3[p3] < max) {
                p3++
            }
        }
    }
    return ans
};