原链接:https://leetcode-cn.com/problems/3sum/

    题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
    注意:答案中不可以包含重复的三元组。

    题解一:双指针法
    首先看边界调节,如果数组不存在或者数组数量小于3,则返回空数组。
    再者注意题目中的“不可以包含重复”,这就意味着我们可以利用排序避免重复答案,再通过降低复杂度求两数之和,利用双指针找到所有解。

    1. var threeSum = function(nums){
    2. const n = nums.length;
    3. let result = [];
    4. if(!nums || n < 3){
    5. return result;
    6. }
    7. nums.sort((a,b) => a-b);
    8. for(let i = 0; i < n ; i++){
    9. if(nums[i] > 0)return result;
    10. if(i > 0 && nums[i] == nums[i - 1])continue;
    11. let L = i + 1;
    12. let R = n - 1;
    13. while (L < R) {
    14. if(nums[i] + nums[L] + nums[R] == 0){
    15. result.push([nums[i], nums[L], nums[R]]);
    16. while(L < R && nums[L] == nums[L+1]){
    17. L++
    18. };
    19. while(L < R && nums[R] == nums[R-1]){
    20. R--
    21. };
    22. L++;
    23. R--;
    24. }else if(nums[i] + nums[L] + nums[R] < 0){
    25. L = L + 1;
    26. }else{
    27. R = R - 1;
    28. }
    29. }
    30. }
    31. return result;
    32. }