[leetcode] 4sum

与3sum类似,这里直接定代码,需要流量为了提高效果而做的剪枝。

 1 class Solution {
 2 public:
 3     vector<vector<int>> fourSum(vector<int>& nums, int target) {
 4         vector<vector<int> > result;
 5         if (nums.size()<4) return result;
 6         sort(nums.begin(), nums.end());
 7         for(size_t i=0;i<nums.size()-3;i++) {
 8             if (i>0 && nums[i]==nums[i-1]) continue;
 9             for (size_t j=i+1;j<nums.size()-2;j++){
10                 if (j-i>=2 && nums[j]==nums[j-1]) continue;
11                 int cur_target = target-nums[i];
12                     int inner_target = cur_target-nums[j];
13                     int left_pt = j+1, right_pt = nums.size()-1;
14                     while (left_pt < right_pt) {
15 
16                         if (nums[left_pt] + nums[right_pt] > inner_target) {
17                             right_pt--;
18                         } else if (nums[left_pt] + nums[right_pt] < inner_target) {
19                             left_pt++;
20                         } else {
21                             vector<int> temp;
22                             temp.push_back(nums[i]);
23                             temp.push_back(nums[j]);
24                             temp.push_back(nums[left_pt]);
25                             temp.push_back(nums[right_pt]);
26                             result.push_back(temp);
27                             //cout<<nums[i]<<" "<<nums[j]<<" "<<nums[left_pt]<<" "<<nums[right_pt]<<endl;
28                             left_pt++;
29                             right_pt--;
30                             while (left_pt<right_pt && nums[left_pt]== nums[left_pt-1]) {
31                                 left_pt++;
32                             }
33                             while(left_pt<right_pt && nums[right_pt] == nums[right_pt+2]) {
34                                 right_pt--;
35                             }
36                         }
37 
38                     }
39             }
40         }
41         return result;
42     }
43 };

 

posted @ 2018-06-12 02:26  力兜儿  阅读(109)  评论(0)    收藏  举报