算法 三数之和
算法 15.三数之和

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

简单理解:
3数之和,将一个数固定,根据三数之和,移动
start和end来达到总和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
};
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
