[LeetCode] 3-SUM 改进

class Solution {
public:
	vector<vector<int> > threeSum(vector<int> &num) {
	// Start typing your C/C++ solution below
	// DO NOT write int main() function

		vector<vector<int> > ret;
		ret.clear();
		sort(num.begin(), num.end());
		for(int i=0; i!=num.size(); i++)
		{
			//avg = 269.2 ms
			if (num[i]>0)
			//avg = 253.2 ms
				break;
			if (i > 0 && num[i]==num[i-1])
				continue;
				
			int j,k;
			j = i+1;
			k = num.size()-1;
			while (j<k) {
				if (j>i+1 && num[j]==num[j-1]) { 
					j++;					
					continue;
				}
				if (k<num.size()-1 && num[k]==num[k+1]) {
					k--;
					continue;
				}
				int sum = num[i] + num[j] + num[k];
				if (sum>0) {
					k--;
				}else if (sum<0) {
					j++;
				}else {
					vector<int> tmp;
					tmp.push_back(num[i]);
					tmp.push_back(num[j]);
					tmp.push_back(num[k]);
					ret.push_back(tmp);
					j++;
				}
			}
		}
	return ret;
	}
};

加入比较判断语句

if (num[i]>0)
    break;

之前,LeetCode 通过时间统计:

// no compare  time:ms
276
276
284
256
268

272
244
268
268
280

avg1 = 269.2 ms

加入比较判断语句之后的 LeetCode 通过时间统计:

// if(num[i]>0)	break;
260
248
272
280
248

248
244
244
244
244

avg2 = 253.2 ms

avg1=269.2ms,avg2=253.2ms,通过时间有了明显的下降。


你可能感兴趣的:(LeetCode,3-SUM)