20220422,14min

|
```javascript /**

  • @param {number[]} nums
  • @return {number[][]} */ // 15:35 -> 15:49 var threeSum = function(nums) { nums.sort((a, b) => a - b);

    let ans = []; if(!nums) return ans; const len = nums.length; if (len < 3) return ans; for(let i = 0; i < len; i++) { if (nums[i] > 0) break; // bug:这句忘写了 if(i > 0 && nums[i] === nums[i - 1]) continue; // 这句忘写了 let l = i + 1; let r = len - 1; while (l < r) {

    const sum = nums[i] + nums[l] + nums[r]; if (sum === 0) {

    1. ans.push([nums[i], nums[l], nums[r]]);
    2. // 去重
    3. while(l < r && nums[l] === nums[l + 1]) l++;
    4. while(l < r && nums[r] === nums[r -1]) r--;
    5. l++; // 忘写了
    6. r--; // bug: 忘写了

    } else if (sum < 0) {

     l++;
    

    } else if (sum > 0) {

     r--;
    

    } } } return ans; }; ``` | | —- |

20220418,15min

|
```javascript /**

  • @param {number[]} nums
  • @return {number[][]} */ // 22:08 -> 22:23 // 双指针 var threeSum = function(nums) { const len = nums.length; if (len < 3) return [] let arr = [] nums.sort((a, b) => a - b); for (let i = 0; i < len; i++) { if (nums[i] > 0) break; // if (i > 0 && nums[i] === nums[i + 1]) continue; // bug:这句去重忘记写了 // bug,不应是i+1, 应该是i-1,因为i-1比较过了,但是i+1没有比较过 if (i > 0 && nums[i] === nums[i - 1]) continue; let l = i + 1; let r = len -1; while(l < r) { const sum = nums[i] + nums[l] + nums[r]; if (sum === 0) {
     // arr.push(nums[i], nums[l], nums[r]); // bug:这样一下子放入了3个数组项
     arr.push([nums[i], nums[l], nums[r]]);
     while(l < r && nums[l+1] === nums[l]) l++;
     while(l < r && nums[r-1] === nums[r] ) r--;
     l++;
     r--;
    
    } else if (sum < 0) {
     l++;
    
    } else if (sum > 0) {
     r--;
    
    } } } return arr; }; ``` | | —- |

20220417, 7min

|
```javascript /**

  • @param {number[]} nums
  • @return {number[][]} */ // 21:24 -> 21:41 // 双指针 var threeSum = function(nums) { const len = nums.length; if (!nums || len < 3) return []; let arr = []; nums.sort((a, b) => a - b); // [-4, -1, -1, 0, 1, 2] for (let i = 0; i < len; i++) { if (nums[i] > 0) break; // if (nums[i] === nums[i+1]) continue; // bug:[-1, -1, 0 , 1, 2]会直接被过滤掉,跳过了[-1, -1, 2]循环 if (i > 0 && nums[i] === nums[i - 1]) continue; let l = i + 1; let r = len - 1; while(l < r) { // bug:原先这句没有写。导致l, r指针是变了,但是没有重新计算sum是否===0,导致最终结果只有0个或1个数组 // const sum = nums[i] + nums[l] + nums(r); // bug: nums is not a funciton,不应写成nums(r) const sum = nums[i] + nums[l] + nums[r];

    if (sum === 0) {

     // arr.push(nums[i], nums[l], nums[r]); // bug
     arr.push([nums[i], nums[l], nums[r]]);
     while(l < r && nums[l] === nums[l + 1]) l++;
     while(l < r && nums[r] === nums[r - 1]) r--;
     l++;
     r--;
    

    } else if (sum < 0) {

     l++;
    

    } else if (sum > 0) {

     r--;
    

    } } } return arr; }; ``` | | —- |

20220417,写了一半后看了题解

|
```javascript /**

  • @param {number[]} nums
  • @return {number[][]} */ // 20:01 -> 20:19 // 双指针 // var threeSum = function(nums) { // if (nums.length) return [] // bug:这样全都返回[]了 if (nums.length < 3) return [] nums.sort((a, b) => a - b); let arr = []; for (let i = 0; i < nums.length; i++) { // if (nums[i] > 0) return [] // bug:这样就直接退出来了 if (nums[i] > 0) break; if (i > 0 && nums[i] === nums[i -1]) continue; let l = i + 1; let r = nums.length -1; // while(l < r && (nums[i] + nums[l] + nums[r]) < 0) l++; // while(l < r && (nums[i] + nums[l] + nums[r]) > 0) r—; while(l < r) { const sum = nums[i] + nums[l] + nums[r] if (sum === 0) {
     arr.push([nums[i], nums[l], nums[r]]);
     while((l < r) && nums[l] === nums[l+1]) l++; // 去重
     while((l < r) && nums[r] === nums[r+1]) r++; // 去重
     l++;
     r--;
    
    } else if (sum < 0) {
     l++;
    
    } else if (sum > 0) {
     r--;
    
    } } } return arr; }; ``` | | —- |