中级农民
- 积分
- 116
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2009-10-2
- 最后登录
- 1970-1-1
|
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
这道题我写了个这样的解法:- vector<vector<int> > threeSum(vector<int> &num) {
- // Start typing your C/C++ solution below
- // DO NOT write int main() function
- vector<vector<int> > result;
- int i = 0, j = i + 1, l = num.size() - 1;
- if(l<2) return result;
- sort(num.begin(), num.end());
- int prev1 = num[0];
- int prev2 = num[1];
- int prev3 = num[2];
-
- for(i = 0; i < num.size() - 2; i++)
- { if(i>0&&prev1 == num[i]) continue;
- int a = num[i];
- prev1 = num[i];
- prev2 = num[i+1];
- prev3 = num[num.size()-1];
- for(j = i + 1, l = num.size() - 1; j < l; )
- { if(j>i+1&&prev2 == num[j]) {
- j++;
- continue;
- }
- if(l<num.size()-1&&prev3 == num[l]){
- l--;
- continue;
- }
-
- int b = num[j];
- int c = num[l];
- if(a + b + c < 0)
- {
- j++;
- }
- else if(a + b + c > 0)
- {
- l--;
- }
- else
- {
- vector<int> v;
- v.push_back(a);
- v.push_back(b);
- v.push_back(c);
- result.push_back(v);
- prev2 = num[j];
- prev3 = num[l];
- j++;
- l--;
- continue;
- }
- }
- }
- return result;
- }
复制代码 还有更快的解法吗? 求牛牛们指点!
|
上一篇: bit vector 会比boolean array 节约很多内存么?下一篇: 社区发现算法总结
|