Algorithms: Pairwise
This commit is contained in:
parent
96a5e6bff1
commit
3e3dce5f4a
30
Algorithms/pairwise.js
Normal file
30
Algorithms/pairwise.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// https://www.freecodecamp.org/learn/coding-interview-prep/algorithms/pairwise
|
||||||
|
|
||||||
|
function pairwise(arr, sum) {
|
||||||
|
const arr2 = arr.map((num, index) => ({ num: num, index: index }));
|
||||||
|
arr2.sort(({ num: numA, index: indexA }, { num: numB, index: indexB }) => {
|
||||||
|
if (numA === numB) {
|
||||||
|
return indexA - indexB;
|
||||||
|
} else {
|
||||||
|
return numA - numB;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let [i, reverseI, pairsIndexSum] = [0, arr2.length - 1, 0];
|
||||||
|
while (i < reverseI) {
|
||||||
|
if (arr2[i].num + arr2[reverseI].num === sum) {
|
||||||
|
if (arr2[i].num === arr2[reverseI].num) {
|
||||||
|
pairsIndexSum += arr2[i++].index + arr2[i++].index;
|
||||||
|
} else {
|
||||||
|
pairsIndexSum += arr2[i++].index + arr2[reverseI--].index;
|
||||||
|
}
|
||||||
|
} else if (arr2[i].num + arr2[reverseI].num < sum) {
|
||||||
|
i++;
|
||||||
|
} else {
|
||||||
|
reverseI--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pairsIndexSum;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(pairwise([1, 1, 1], 2));
|
Loading…
Reference in New Issue
Block a user