给出三个均为 严格递增排列 的整数数组
arr1,arr2和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
};