发布:2021年8月9日20:04:06
问题描述及示例
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/3sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 示例 2: 输入:nums = [] 输出:[] 示例 3: 输入:nums = [0] 输出:[] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/3sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
提示: 0 <= nums.length <= 3000 -105 <= nums[i] <= 105
我的题解
其实整体思路是在LeetCode两数之和那个题目上做一点改变得到的。
var threeSum = function(nums) {
let result = [];
nums.sort((a, b) => a - b);
for(let i = 0; i < nums.length - 2; i++) {
while(nums[i] === nums[i-1]) {
i++;
}
let target = 0 - nums[i];
let front = i + 1;
let rear = nums.length - 1;
while(front < rear) {
if(nums[front] + nums[rear] === target) {
result.push([nums[i], nums[front], nums[rear]]);
while(front < rear && nums[front] === nums[front+1]) {
front++;
}
while(front < rear && nums[rear] === nums[rear-1]) {
rear--;
}
rear--;
front++;
} else if(nums[front] + nums[rear] > target) {
rear--;
} else {
front++;
}
}
}
return result;
};
提交记录
318 / 318 个通过测试用例
状态:通过
执行用时:124 ms, 在所有 JavaScript 提交中击败了98.50%的用户
内存消耗:48 MB, 在所有 JavaScript 提交中击败了45.81%的用户
时间:2021/08/09 20:00
官方题解
更新:2021年7月29日18:43:21
因为我考虑到著作权归属问题,所以【官方题解】部分我不再粘贴具体的代码了,可到下方的链接中查看。
更新:2021年8月9日20:08:05
参考:三数之和 - 三数之和 - 力扣(LeetCode)
【更新结束】
有关参考
更新:2021年8月9日20:06:24 参考:浅谈js数组中的length属性 - 小宁同学 - 博客园 参考:【微信公众号:三分钟学前端 2021-07-28】每日算法:三数之和
|