JSFiddle - React, Tailwind, and code Playground
by asdf
HTML
<!-- Given three arrays sorted in non-decreasing order, print all common elements in these arrays.
ar1 = {1, 5, 10, 20, 40, 80}
ar2 = {6, 7, 20, 80, 100}
ar3 = {3, 4, 15, 20, 30, 70, 80, 120}
Output: 20, 80
ar1 = {1, 5, 5}
ar2 = {3, 4, 5, 5, 10}
ar3 = {5, 5, 10, 20}
Outptu: 5, 5
JavaScript
function getIntersection(arr1, arr2, arr3) {
var intersec = [];
var arr1Map = {};
var firstIntersec = {};
for (var i=0; i<arr1.length; i++) {
if (!arr1Map.hasOwnProperty(arr1[i])) {
arr1Map[arr1[i]] = 1;
} else {
arr1Map[arr1[i]] += 1;
}
}
for (var j=0; j<arr2.length; j++) {
if (arr2[j] <= arr1[arr1.length-1]) {
if (arr1Map.hasOwnProperty(arr2[j]) && arr1Map[arr2[j]]>0) {
if (!firstIntersec.hasOwnProperty(arr2[j])) {
firstIntersec[arr2[j]] = 1;
} else {
firstIntersec[arr2[j]] += 1;
}
arr1Map[arr2[j]] -= 1;
}
} else {
break;
}
}
for (var k=0; k<arr3.length; k++) {
if (arr3[k] <= arr1[arr1.length-1]) {
if (firstIntersec.hasOwnProperty(arr3[k]) && firstIntersec[arr3[k]]>0) {
intersec.push(arr3[k]);
firstIntersec[arr3[k]] -= 1;
}
} else {
break;
}
}
return intersec;
}
var ar1 = [1, 5, 10, 20, 40, 80],
ar2 = [6, 7, 20, 80, 100],
ar3 = [3, 4, 15, 20, 30, 70, 80, 120],
ar12 = [1, 5, 5],
ar22 = [3, 4, 5, 5, 10],
ar32 = [5, 5, 10, 20];
console.log(getIntersection(ar1, ar2, ar3));
console.log(getIntersection(ar12, ar22, ar32));