做电子商务网站需要什么软件,在网站上做广告,怎么才能制作网站呢,观察者网wordpress荒废好久没更新了#xff0c;时间过得很快#xff0c;转眼就2017年了#xff0c;经历了苦闷的科研阶段#xff0c;发了论文顺利毕业#xff1b;也经过三地辗转奔波来去的找工作#xff0c;最终还是犹犹豫豫选择了自己知道以后可能会后悔的#xff0c;果然就后悔了。所以… 荒废好久没更新了时间过得很快转眼就2017年了经历了苦闷的科研阶段发了论文顺利毕业也经过三地辗转奔波来去的找工作最终还是犹犹豫豫选择了自己知道以后可能会后悔的果然就后悔了。所以还是应该选择自己喜欢的当然也许人总是会这样总觉得没走的另一条路也许走起来更畅通。 Given an array S of n integers, are there elements a, b, c in S such that a b c 0? Find all unique triplets in the array which gives the sum of zero. 解题思路本题的思路与2 sum类似首先对数组进行排序然后依次把每位数字当做target用类似于处理2 sum的思路进行两边扫描向中间逼近的处理。只是在此题中要注意重复的问题。 左数从i1开始可以理解为处理的sum[i]作为三个数中的最左值从此数的右边第一位和数据的最后一位向中间靠拢寻找符合的数字组合。如果把sum[i]作为中间的值来处理则存在找出重复数组的风险如下 input-1、-1、0、1、2output[-1,-1,2] [0,-1,1] [1,-1,0]....//可以看到如果允许跨过target本身去寻找就存在重复的风险 int left i 1;
int right nums.size() - 1; 因为数组已经是排过序的因此检查如下语句避免作为左值的数重复。 if(i 0 nums[i] nums[i - 1]) //continue;数组中可能存在不止一组数字的和与target相加的值等于零因此两边继续向内扫描如下两句则是避免中间数字和右边数字重复的问题。 while(left right nums[left] nums[left 1]) left;
while(left right nums[right] nums[right -1 ]) right--;完整代码如下 class Solution {
public:vectorvectorint threeSum(vectorint nums) {vectorvectorint resl;int length nums.size();if(length 3)return resl;sort(nums.begin(), nums.end());for (int i 0; i nums.size() - 1; i){if(i 0 nums[i] nums[i - 1])continue;int left i 1;int right nums.size() - 1;while(left right){vectorint temp;if(nums[i] nums[left] nums[right] 0){temp.push_back(nums[i]);temp.push_back(nums[left]);temp.push_back(nums[right]);while(left right nums[left] nums[left 1]) left;while(left right nums[right] nums[right -1 ]) right--;left;right--;}else if (nums[i] nums[left] nums[right] 0)left;else --right;if(temp.size() 0)resl.push_back(temp);}}return resl;}
}; 转载于:https://www.cnblogs.com/echo-lsh/p/6496911.html