做外贸用什么服务网站,网站信息维护方案,怎么样做贷款网站,电子商务网站建设课设学生体会文章目录 1.题目2.思路3.代码 1.题目
LCR 007. 三数之和
给定一个包含 n 个整数的数组 nums#xff0c;判断 nums 中是否存在三个元素 a #xff0c;b #xff0c;c *#xff0c;*使得 a b c 0 #xff1f;请找出所有和为 0 且 不重复 的三元组。
示例 1#xff1a… 文章目录 1.题目2.思路3.代码 1.题目
LCR 007. 三数之和
给定一个包含 n 个整数的数组 nums判断 nums 中是否存在三个元素 a b c **使得 a b c 0 请找出所有和为 0 且 不重复 的三元组。
示例 1
输入nums [-1,0,1,2,-1,-4]
输出[[-1,-1,2],[-1,0,1]]示例 2
输入nums []
输出[]示例 3
输入nums [0]
输出[]2.思路
首先确定一个元素然后剩下两个元素从两端开始遍历注意防止越界并检查当前 nums[left] 是否与前一个 nums[left-1] 相同。如果两者相同说明当前这个 nums[left] 已经被计算过了同样对于第一个元素保证并列的两个元素不同
3.代码
class Solution {
public:vectorvectorint threeSum(vectorint nums) {vectorvectorint ret;sort(nums.begin(), nums.end());for(int i 0; i nums.size(); i){// 对第一个元素去重if (i 0 nums[i] nums[i - 1]) continue;int left i1, right nums.size()-1;while(left right){if(nums[i]nums[left]nums[right] 0){ret.push_back({nums[i], nums[left], nums[right]});--right, left;//对第二第三个元素去重。注意越界问题while(left right nums[left] nums[left-1]) left;while(left right nums[right] nums[right1]) --right;}else if(nums[i]nums[left]nums[right] 0){--right;}else{left;}}}return ret;}
};