# 015. 3Sum

**<font color=red>难度: Medium</font>**

## 刷题内容

> 原题连接

* https://leetcode.com/problems/3sum/description/

> 内容描述

Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

#### Note:
     
     The solution set must not contain duplicate triplets.

#### Example:
     
     Given array nums = [-1, 0, 1, 2, -1, -4],
     
     A solution set is:
     [
       [-1, 0, 1],
       [-1, -1, 2]
     ]


## 解题方案

> 思路 
******- 时间复杂度: O(N²)******- 空间复杂度: O(N)******


代码：

```javascript
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
let threeSum = function(nums, n = 0) {
    let result = [];
    let len = nums.length;
    if(!len) return result;
    // 对数组进行排序
    nums.sort((a,b)=>a-b);
    for(let k = 0; k<len; k++){
        //重复的元素则结果也一样，所以跳过该循环
        if(k>0 && nums[k-1] === nums[k]){
            continue;
        }
        let target = n - nums[k];
        let i = k + 1;
        let j = len -1;
        while(i<j){
            if(nums[i] + nums[j] === target){
                result.push([nums[k],nums[i],nums[j]]);
                while (i<j && nums[i] === nums[i+1]) i++;
                while (i<j && nums[j] === nums[j-1]) j--;
                i++;
                j--;
            }else if(nums[i] + nums[j] > target){
                j--;
            }else{
                i++
            }
        }
    }
    return result;
};
```

