新手学网站建设视频教程共30课高清版2狠狠做网站
news/
2025/10/1 12:18:27/
文章来源:
新手学网站建设视频教程共30课高清版,2狠狠做网站,文山seo公司,网站建设后应该干什么题目
给你一个整数数组 nums #xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k #xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请
你返回所有和为 0 且不重复的三元组。
注意#xff1a;答案中不可以包含重复的三元组。 …题目
给你一个整数数组 nums 判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k 同时还满足 nums[i] nums[j] nums[k] 0 。请
你返回所有和为 0 且不重复的三元组。
注意答案中不可以包含重复的三元组。 示例 1 输入nums [-1,0,1,2,-1,-4]
输出[[-1,-1,2],[-1,0,1]]
解释
nums[0] nums[1] nums[2] (-1) 0 1 0 。
nums[1] nums[2] nums[4] 0 1 (-1) 0 。
nums[0] nums[3] nums[4] (-1) 2 (-1) 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意输出的顺序和三元组的顺序并不重要。示例 2 输入nums [0,1,1]
输出[]
解释唯一可能的三元组和不为 0 。示例 3 输入nums [0,0,0]
输出[[0,0,0]]
解释唯一可能的三元组和为 0 。我的思路
var threeSum function(nums) {var len nums.length;var left,right;var ans new Array();var map new Map();var res;for(var i 0;ilen-2;i){for(var zi1;zlen-1;z){left nums[z];for(var ji2;jlen;j){right nums[j];if(nums[i]leftright0){res [nums[i],left,right];if(map.has(res.sort((a,b)a-b))){continue;}else{ans.push([nums[i],left,right]);map.set(res.sort((a,b)a-b),1);}}}}}return ans;
};
题解
首先对数组进行排序排序后固定一个数 nums[i]再使用左右指针指向 nums[i]后面的两端数字分别为 nums[L]和 nums[R]计算三个数的和 sum 判断是否满足为 000满足则添加进结果集 如果 nums[i]大于 0则三数之和必然无法等于 0结束循环 如果 nums[i] nums[i−1]则说明该数字重复会导致结果重复所以应该跳过 当 sum 0 时nums[L] nums[L1] 则会导致结果重复应该跳过L 当 sum 0 时nums[R] nums[R−1] 则会导致结果重复应该跳过R−−。
/*** param {number[]} nums* return {number[][]}*/
var threeSum function(nums) {let ans [];const len nums.length;if(nums null || len 3) return ans;nums.sort((a, b) a - b); // 排序for (let i 0; i len ; i) {if(nums[i] 0) break; // 如果当前数字大于0则三数之和一定大于0所以结束循环if(i 0 nums[i] nums[i-1]) continue; // 去重let L i1;let R len-1;while(L R){const sum nums[i] nums[L] nums[R];if(sum 0){ans.push([nums[i],nums[L],nums[R]]);while (LR nums[L] nums[L1]) L; // 去重while (LR nums[R] nums[R-1]) R--; // 去重L;R--;}else if (sum 0) L;else if (sum 0) R--;}} return ans;
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923838.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!