JSFiddle - React, Tailwind, and code Playground

combine numbers in triplets to make sum of 0 filter duplicates

by Yurii Predborskyi

JavaScript

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
  // sum up 1st el and 2nd el and look for opposite element in remainder of the array
  // (indexOf 2nd value is start index)
  // remove duplicate triplets - how?
  // create result array, sort it, check if there is an identical array in results
  // if yes, skip adding
  // if no, add to results

  // complexity O(n*n)?
  // sort nums array
  // combine 1st and 2nd elements
  // look for opposite sum from the other side
  function addToResults(i, j, k) {
  	let res = [nums[i], nums[j], nums[k]];
    console.log('results are ', results);
    for (let l = 0; l < results.length; l++) {
    	if (
      	results[l][0] === res[0] &&
      	results[l][1] === res[1] &&
      	results[l][2] === res[2]
      ) {
      	console.log('duplicate found');
      	return;
      }
    }
    results.push(res);
    console.log('results pushed, no duplicates found');
  	// test weather nums[i], nums[j], nums[k] result already exists, if not, push
  }

  nums.sort((a, b) => a - b); // sort in ascending order
  let results = [];
  console.log('sorted array is ', nums);

	for (let i = 0; i < nums.length - 2; i++) {
    for (let j = i + 1; j < nums.length - 1; j++) {
      sum = (nums[i] + nums[j]) * (-1);
      console.log('current pair is ', sum);
      for (let k = nums.length - 1; k > j; k--) {
      	if (nums[k] === sum) {
        	console.log('found a match for the pair! adding result', nums[i], nums[j], nums[k]);
        	addToResults(i, j, k);
        }
        if (nums[k] < sum) {
        	console.log('reached value ', nums[k], ' fitting result not found');
					break;
        }
      }
    }
  }
  return results;
};

let res = threeSum([-1, 0, 1, 2, -1, -4]);
console.log('triples: ', res);