Skip to content

Instantly share code, notes, and snippets.

@sdwvit
Created January 13, 2023 22:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sdwvit/4371b3b1f6c6703d29a282d6f982d81a to your computer and use it in GitHub Desktop.
Save sdwvit/4371b3b1f6c6703d29a282d6f982d81a to your computer and use it in GitHub Desktop.
leetcode 3sum
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
const map = nums.reduce((mem, n) =>{
if (!mem[n]) {
mem[n] = []
}
mem[n].push(n);
return mem;
}, {});
const sorted = nums.sort();
console.log({ sorted } )
const pairs = [];
let lookingFor = 0;
for (let i = 0; i < sorted.length - 2; i++) {
for (let j = i + 1; j < sorted.length - 1; j++) {
lookingFor = -(sorted[i] + sorted[j]);
// console.log({ lookingFor } )
// binary search;
let l = j+1, r = sorted.length - 1, m = Math.floor((l + r) / 2);
while (l <= r && sorted[m] !== lookingFor) {
m = Math.floor((l + r) / 2);
//console.log({ l: sorted[l], r: sorted[r], m: sorted[m] } )
//console.log(`sorted[m] < lookingFor` )
//console.log(sorted[m], lookingFor)
if (sorted[m] <= lookingFor) {
l = m + 1;
} else if (sorted[m] > lookingFor) {
r = m - 1;
}
}
if (sorted[m] === lookingFor) {
pairs.push(...map[sorted[m]].map(n => [n, sorted[i], sorted[j] ]));
map[sorted[m]] = [];
console.log({ s: sorted[m], i: sorted[i], j: sorted[j] , pairs} )
}
}
}
console.log(JSON.stringify(map))
return Object.values(pairs.reduce((mem, pair) => {
mem[pair.sort().join()] = pair;
return mem;
},{}));
};
@sdwvit
Copy link
Author

sdwvit commented Jan 13, 2023

does not work properly, there is a bug

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment