Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var threeSum = function(nums) {
  2.     return calc(nums);
  3. };
  4.  
  5.  
  6. function compareNumbers(a, b) {
  7.     return a - b;
  8. }
  9.  
  10.  
  11.  
  12. const createMap = (nums) => {
  13.     const map = new Map();
  14.     let v = Infinity;
  15.     for (let i = nums.length - 1; i >= 0 && v > 0; i--) {
  16.         v = nums[i];
  17.         if (!map.has(v)) map.set(v, i);
  18.     }
  19.     return map;
  20. };
  21.  
  22. const calc = (nums) => {
  23.     if (nums.length < 3)
  24.         return [];
  25.     nums.sort(compareNumbers);
  26.     const map = createMap(nums);
  27.     const result = [];
  28.     let prevB = null;
  29.     let prevA = -Infinity;
  30.     for (let i = 0; i < nums.length - 2 && prevA <= 0; i++) {
  31.         const a = nums[i];
  32.         if (a !== prevA) {
  33.             prevA = a;
  34.             let bIndex = i + 1;
  35.             while (bIndex < nums.length - 1) {
  36.                 const b = nums[bIndex];
  37.                 let c = Infinity;
  38.                 if (b !== prevB && b < c) {
  39.                     prevB = b;
  40.                     c = 0 - a - b;
  41.                     const cIndex = map.get(c);
  42.                     if (cIndex > bIndex)
  43.                         result.push([a, b, c]);
  44.                 }
  45.                 bIndex++;
  46.             }
  47.         }
  48.     }
  49.     return result;
  50. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement