
难度:Medium
解题思路:可以按照3Sum的思路来。代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> ret; if(nums.size()<4) return ret; sort(nums.begin(),nums.end()); for(int i = 0; i < nums.size()-3; i++) { if(i!=0 && nums[i]==nums[i-1]) continue; for(int j = i+1; j < nums.size()-2; j++) { if(j!=i+1 && nums[j]==nums[j-1]) continue; int low = j+1; int high = nums.size()-1; while(low < high) { if(low != j+1 && nums[low]==nums[low-1]) { low++; continue; } if(high != nums.size()-1 && nums[high]==nums[high+1]){ high--; continue; } int sum = nums[i]+nums[j]+nums[low]+nums[high]; if(sum == target) { ret.push_back({nums[i],nums[j],nums[low],nums[high]}); high--; } else if(sum > target) high--; else low++; } } } return ret; } };
|
近期评论