算法 三数之和

算法 15.三数之和

在这里插入图片描述
思路

  1. 给数组排序
  2. 遍历数组,从0遍历到length-2(因为一个数固定,两个数可以移动)
  3. 如果当前的数组等于前一个数字,则跳过这个数(作用:去重)
  4. 如果数字不同,则设置start = i + 1end = length - 1,查看istartend三个数的和 比零大还是小
  5. 如果三数之和比0小,start++,如果比0大,end--

在这里插入图片描述
简单理解:

3数之和,将一个数固定,根据三数之和,移动startend来达到总和0

/*** @param {number[]} nums* @return {number[][]}*/
var threeSum = function(nums) {if(nums.length < 3) return []let resArr = []nums = nums.sort(function(a, b){return a-b})for(let i = 0; i < nums.length-2; i++){if(nums[i] === nums[i-1]){continue}let start = i+1let end = nums.length-1while(start < end){if(nums[start] + nums[end] + nums[i] === 0){resArr.push([nums[start],nums[end],nums[i]])start++end--// [-2,0,0,2,2]防止此类错误while(start < end && nums[start] === nums[start-1]){start++}while(start < end && nums[end] === nums[end+1]){end--}}else if(nums[start] + nums[end] + nums[i] < 0){start++}else{end--}}}return resArr
};


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部