Leetcode 18 4Sum
这道题也是对撞指针的题目。很像3Sum,就多了一层循环,时间复杂度也就从O(n^2)增长到了O(n^3)。
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { int n = nums.size(); vector<vector<int>> ret; sort(nums.begin(), nums.end()); for(int i=0; i<n-3; ++i) { for (int j=i+1; j<n-2; ++j) { int l = j + 1; int r = n - 1; while (l < r) { int sum = nums[i] + nums[j] + nums[l] + nums[r]; if (sum == target) { ret.push_back({nums[i], nums[j], nums[l++], nums[r--]}); while (l < r && nums[l] == nums[l - 1]) { ++l; } while (l < r && nums[r] == nums[r + 1]) { --r; } } else if (sum > target) { --r; } else { ++l; } } while (j<n-2 && nums[j] == nums[j+1]) { ++j; } } while (i<n-3 && nums[i] == nums[i+1]) { ++i; } } return ret; } };

浙公网安备 33010602011771号