天津网站建设定做,js代码 嵌入网站,最好的购物网站排名,蓝色企业网站手机版织梦模板个人主页#xff1a;Lei宝啊
愿所有美好如期而遇 算法原理
双指针法#xff0c;不一定是说就要使用指针#xff0c;只是一种形象的说法#xff0c;在数组中#xff0c;我们一般将数组下标当做指针。我们首先对数组进行排序#xff0c;从左向右标定一个下标i#xff0… 个人主页Lei宝啊
愿所有美好如期而遇 算法原理
双指针法不一定是说就要使用指针只是一种形象的说法在数组中我们一般将数组下标当做指针。我们首先对数组进行排序从左向右标定一个下标i定义left和rightleft赋值i1 right赋值size-1进入循环当leftright时跳出循环循环内我们判断left和right对应的数组的值之和以及i对应的值的大小当他们互为相反数时三者计入vector然后leftright--当i对应的值大时left否则right--重复上述步骤直到i对应的值大于0跳出整个循环需要注意的是需要保证去重和不漏所以我们需要循环去判断。
图示 代码
class Solution {
public:vectorvectorint threeSum(vectorint nums){sort(nums.begin(), nums.end());int n nums.size();vectorvectorint vv;for (int i 0; i n;){if (nums[i] 0){break;}int left i 1, right n - 1;while (left right){int sum nums[left] nums[right];if (sum -nums[i]){right--;}else if (sum -nums[i]){left;}else{vv.push_back({ nums[left],nums[right],nums[i] });left;right--;while (left right nums[right] nums[right 1]){right--;}while (left right nums[left] nums[left - 1]){left;}}}i;while (i n nums[i] nums[i - 1]){i;}}return vv;}
};