题目描述
给一个数组nums,判断是否存在三个元素a,b,c满足 a+b+c =0,找出所有和为0且不重复的三元组。
思路:
1、如果nums的长度小于3,直接返回;
2、先从小到大排序,如果第一个数大于0 或者最后一个数小于0 那么一定不存在这样的三个元素。
3、这里面的难点是去重
function threeSum(nums){
let len = nums.length;
if(len < 3) return [];
nums.sort((a,b)=>{return a-b} )
let newArr = [];
for(let i=0;i<len-2; i++){
if(nums[i] >0) break;
if( i >0 && nums[i] == nums[i-1]) continue;
let L = i+1;
let R = len-1;
while(L < R){
let sum = nums[i] + nums[L] + nums[R];
if(sum == 0){
newArr.push([nums[i],nums[L],nums[R]])
while((L<R)&&nums[L] == nums[++L]) ;
while((L<R)&&nums[R] == nums[--R]) ;
}
else if(sum <0) L++;
else if(sum >0) R--;
}
}
return newArr;
}
这道题做了一天,,原来是一个小小的问题,就很离谱
关于排序的sort中的箭头函数的用法:
var arr = [-2,-5,-1,0,4]
arr.sort((a,b)=>{return a-b})
console.log(arr) ; //[-5,-2,-1,0,4] 正确排序
arr.sort((a,b)=>a-b)
console.log(arr) ; //[-5,-2,-1,0,4] 正确排序
arr.sort((a,b)=>{a-b})
console.log(arr) ; //没有排序
箭头函数的用法:应该是 函数体中只有一句返回语句,省略花括号和return
如果函数体有多句,必须加上花括号以及return