lxw124 / -Test

算法
1 stars 0 forks source link

leetcode15-三数之和 #8

Open lxw124 opened 4 years ago

lxw124 commented 4 years ago

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

 

示例:

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]

lxw124 commented 4 years ago

可以先对数组进行排序,然后从左边开始选择一个元素,这个元素必须是为负数,然后在这个元素后面设置左右指针两指针往中间移动,如果两指针和前面那个数相加为0则返回


var threeSum = function(nums) {
   var arr=[]
       nums.sort((x,y)=>x-y);
      for(let i=0;i<nums.length-2;i++){
        var left=i+1;
        var right=nums.length-1
        var x=nums[i];
       if(nums[i]>0){break;}
       if(i&&nums[i]==nums[i-1]){continue}
       var len=nums.length;
     while(left<right){
            var sum=x+nums[left]+nums[right]
           if(sum==0){
                       arr.push([x,nums[left++],nums[right--]])

           while(nums[left]==nums[left-1]){
               left++;       
               }
           while(nums[right]==nums[right+1]){
              right--;
              }
                 }else if(sum>0){right--}
              else{left++}
        }

}
return arr;
}