[leetcode] 3Sum

为了提高效率,先对数组进行排序。

在搜寻满足条件的组合时,可以进行剪枝操作,比如要找两个数使和为a,但开始查找的位置已经大于0 且大于a,那后面就没再必要进行搜寻了。

 1 class Solution {
 2 public:
 3     vector<vector<int>  > threeSum(vector<int>& nums) {
 4         vector<vector<int> > result;
 5         if (nums.size()<3) return result;
 6         sort(nums.begin(), nums.end());
 7         
 8         for (int i=0;i<nums.size()-2 && nums[i]<=0;i++) {
 9             if(i>0 && nums[i]==nums[i-1]) continue;
10             int target_two_sum = 0-nums[i], left_index=i+1, right_index=nums.size()-1;
11             while(left_index<right_index) {
12                 if (nums[left_index]+nums[right_index] < target_two_sum) {
13                     left_index++;
14                 } else if (nums[left_index]+nums[right_index] > target_two_sum) {
15                     right_index--;
16                 } else {
17                     vector<int> temp;
18                     temp.push_back(nums[i]);
19                     temp.push_back(nums[left_index]);
20                     temp.push_back(nums[right_index]);
21                     result.push_back(temp);
22                     left_index++;
23                     while(left_index<right_index && nums[left_index]==nums[left_index-1]) {
24                         left_index++;
25                     }
26                 }
27             }
28         }
29         return result;
30     }
31 };

猜你喜欢

转载自www.cnblogs.com/lidouer/p/9170929.html
今日推荐