网站建设的技术,外贸网站建设ppt模板,江门网页制作,广告策划的目的是什么题目描述
给你一个整数数组 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 。提示
3 nums.length 3000-105 nums[i] 105
解答
class Solution {
public:vectorvectorint threeSum(vectorint nums) {// 排序 双指针// i L Rint n nums.size();vectorvectorint res;if(nums.empty() || n 3){return {};}//sort(nums.begin(), nums.end());for(int i 0; i n; i) // 先固定一个数{// 最小的数都 0,则加上nums[L] 和 nums[R]肯定也大于0if(nums[i] 0) return res;// 跳过重复数字if(i 0 nums[i] nums[i - 1]) continue;int L i 1;int R n - 1;while(L R){if(nums[i] nums[L] nums[R] 0){res.push_back({nums[i], nums[L], nums[R]});// 跳过重复数字while(L R nums[L] nums[L 1]){L L 1;}while(L R nums[R] nums[R - 1]){R R - 1;}L;R--;}else if(nums[i] nums[L] nums[R] 0){R--;}else {L;}}}return res;}
};