Skip to content

Commit 5a5820d

Browse files
committed
smallestTriplet.js
1 parent 303bcfe commit 5a5820d

1 file changed

Lines changed: 114 additions & 0 deletions

File tree

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
// 35. Find Smallest Difference Triplet from Three Arrays
2+
3+
// Approach 1: Brute Force
4+
5+
{
6+
function findSmallestDifferenceTriplet(arr1, arr2, arr3) {
7+
let minDifference = Number.MAX_SAFE_INTEGER;
8+
let resultTriplet;
9+
for (let i = 0; i < arr1.length; i++) {
10+
for (let j = 0; j < arr2.length; j++) {
11+
for (let k = 0; k < arr3.length; k++) {
12+
const maxNum = Math.max(arr1[i], arr2[j], arr3[k]);
13+
const minNum = Math.min(arr1[i], arr2[j], arr3[k]);
14+
const difference = maxNum - minNum;
15+
if (difference < minDifference) {
16+
minDifference = difference;
17+
resultTriplet = [arr1[i], arr2[j], arr3[k]];
18+
}
19+
}
20+
}
21+
}
22+
return resultTriplet;
23+
}
24+
25+
const arr1 = [1, 2, 3, 4, 7];
26+
const arr2 = [5, 10, 12];
27+
const arr3 = [8, 9, 11, 14];
28+
console.log(findSmallestDifferenceTriplet(arr1, arr2, arr3));
29+
}
30+
31+
// Approach 2: Merge and Track
32+
33+
{
34+
function findSmallestDifferenceTriplet(arr1, arr2, arr3) {
35+
let i = 0;
36+
let j = 0;
37+
let k = 0;
38+
let minDifference = Number.MAX_SAFE_INTEGER;
39+
let resultTriplet;
40+
while (i < arr1.length && j < arr2.length && k < arr3.length) {
41+
const maxNum = Math.max(arr1[i], arr2[j], arr3[k]);
42+
const minNum = Math.min(arr1[i], arr2[j], arr3[k]);
43+
const difference = maxNum - minNum;
44+
if (difference < minDifference) {
45+
minDifference = difference;
46+
resultTriplet = [arr1[i], arr2[j], arr3[k]];
47+
}
48+
if (arr1[i] === minNum) {
49+
i++;
50+
} else if (arr2[j] === minNum) {
51+
j++;
52+
} else {
53+
k++;
54+
}
55+
}
56+
57+
return resultTriplet;
58+
}
59+
60+
const arr1 = [1, 2, 3, 4, 7];
61+
const arr2 = [50, 100, 142];
62+
const arr3 = [8, 9, 11, 14];
63+
console.log(findSmallestDifferenceTriplet(arr1, arr2, arr3));
64+
}
65+
66+
// Method 3: Binary Search for Efficient Element Matching
67+
{
68+
function binarySearch(arr, target) {
69+
let left = 0;
70+
right = arr.length - 1;
71+
while (left <= right) {
72+
let mid = Math.floor((left + right) / 2);
73+
if (arr[mid] === target) return mid;
74+
if (arr[mid] < target) left = mid + 1;
75+
else right = mid - 1;
76+
}
77+
return right;
78+
}
79+
80+
function findSmallestDifferenceTriplet(arr1, arr2, arr2) {
81+
let minDifference = Number.MAX_SAFE_INTEGER;
82+
let resultTriplet = [];
83+
84+
for (let i = 0; i < arr1.length; i++) {
85+
let a = arr1[i];
86+
// find closest element in arr2
87+
let pos2 = binarySearch(arr2, a);
88+
let b1 = arr2[pos2] || Number.MAX_SAFE_INTEGER;
89+
let b2 = arr2[pos2 + 1] || Number.MAX_SAFE_INTEGER;
90+
let pos3 = binarySearch(arr3, a);
91+
let c1 = arr3[pos3] || Number.MAX_SAFE_INTEGER;
92+
let c2 = arr3[pos3 + 1] || Number.MAX_SAFE_INTEGER;
93+
94+
for (let b of [b1, b2]) {
95+
for (let c of [c1, c2]) {
96+
let triplet = [a, b, c];
97+
let maxNum = Math.max(a, b, c);
98+
let minNum = Math.min(a, b, c);
99+
let difference = maxNum - minNum;
100+
if (difference < minDifference) {
101+
minDifference = difference;
102+
resultTriplet = triplet;
103+
}
104+
}
105+
}
106+
}
107+
return resultTriplet;
108+
}
109+
110+
const arr1 = [1, 2, 3, 4, 7];
111+
const arr2 = [5, 10, 12];
112+
const arr3 = [8, 9, 11, 14];
113+
console.log(findSmallestDifferenceTriplet(arr1, arr2, arr3));
114+
}

0 commit comments

Comments
 (0)