2026/5/18 22:40:45
网站建设
项目流程
制作企业网站的新闻,承德做网站设计的,凡科建站怎么样,做兼职比较正规的网站题目#xff1a;
给你一个整数数组 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 。解析这道题使用双指针法会非常的方便首先要将数组进行排序随后开启for循环i从0的位置开始设置左指针指向i1设置右指针指向数组最后一个元素然后计算abc的值如果这三个和的值小于0那么左指针往右移动如果三个数之和大于0右指针往左移动但是我们需要注意两个点一个是i要保证得到去重另外一个就是左指针和右指针指向的元素也是需要去重的具体代码/** * param {number[]} nums * return {number[][]} */varthreeSumfunction(nums){constres[]constlennums.length nums.sort((a,b)a-b)for(leti0;ilen;i){letli1letrlen-1iNumnums[i]if(iNum0)returnresif(iNumnums[i-1])continuewhile(lr){letlNumnums[l]letrNumnums[r]letsumiNumlNumrNumif(sum0)lelseif(sum0)r--else{res.push([iNum,lNum,rNum])while(lrnums[l]nums[l1]){l}while(lrnums[r]nums[r-1]){r--}lr--}}}returnres};