码迷,mamicode.com
首页 > 其他好文 > 详细

15. 3Sum

时间:2016-08-10 08:44:52      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

 1 class Solution {
 2 public:
 3     vector<vector<int>> threeSum(vector<int>& nums) { // o(n^3), 超时
 4         vector<vector<int>> vec;
 5         vector<int> temp;
 6         for (int i = 0; i < nums.size(); ++ i) {
 7             temp.push_back(nums[i]);
 8             for (int j = i + 1; j < nums.size(); ++ j) {
 9                 temp.push_back(nums[j]);
10                 for (int k = j + 1; k < nums.size(); ++ k) {
11                     if (temp[0] + temp[1] + nums[k] == 0) {
12                         temp.push_back(nums[k]);
13                         vector<int> tmp = temp;
14                         sort(tmp.begin(), tmp.end());
15                         if(find(vec.begin(), vec.end(), tmp) == vec.end()) vec.push_back(tmp);
16                         temp.pop_back();
17                     }
18                 }
19                 temp.pop_back();
20             }
21             temp.pop_back();
22         }
23         return vec;
24     }
25 };
 1 class Solution {
 2 public:
 3     vector<vector<int>> threeSum(vector<int>& nums) {
 4         vector<vector<int>> vec;
 5         if (nums.size() < 3) return vec;
 6         sort(nums.begin(), nums.end());
 7         for(auto i = nums.begin(); i < nums.end() - 2; ++ i) {
 8             auto j = i + 1;
 9             if (i > nums.begin() && *i == *(i - 1)) continue; // 防止重复出现
10             else {
11                 auto k = nums.end() - 1;
12                 while (j < k) {
13                     if (*i + *j + *k < 0) {
14                         ++ j;
15                         while (j < k && *j == *(j - 1)) ++ j; // 防止重复
16                     }
17                     else if (*i + *j + *k > 0) {
18                         -- k;
19                         while (j < k && *k == *(k + 1)) -- k; // 防止重复
20                     }
21                     else {
22                         vec.push_back(vector<int>{*i, *j, *k});
23                         ++ j; -- k;
24                         while (j < k && *j == *(j - 1) && *k == *(k + 1)) { // 防止重复
25                             ++ j; -- k;
26                         }
27                     }
28                 }
29             }
30         }
31         return vec;
32     }
33 };

 

15. 3Sum

标签:

原文地址:http://www.cnblogs.com/shadowwalker9/p/5755284.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!