[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 };
浙公网安备 33010602011771号