15.jpeg

    代码 :

    1. class Solution {
    2. public:
    3. vector<vector<int>> res;
    4. vector<vector<int>> threeSum(vector<int>& nums) {
    5. if(nums.size() < 3) return res;
    6. sort(nums.begin(), nums.end());
    7. for(int i = 0; i < nums.size() - 2; i ++ ) {
    8. if(i > 0 && nums[i] == nums[i - 1])
    9. continue; // repeat
    10. for(int j = i + 1, k = nums.size() - 1; j < k; j ++ ) {
    11. if (j > i + 1 && nums[j] == nums[j - 1])
    12. continue; // repeat
    13. // a b c d e => a + b + d == 0 => k points to d
    14. while(j < k && nums[i] + nums[j] + nums[k] > 0) {
    15. k -- ;
    16. }
    17. if(j == k) continue;
    18. if(nums[i] + nums[j] + nums[k] == 0)
    19. res.push_back({nums[i], nums[j], nums[k]});
    20. }
    21. }
    22. return res;
    23. }
    24. };

    ——————————————————————————————————————————————————

    ——————————————————————————————————————————————————

    1. class Solution {
    2. public:
    3. vector<vector<int>> res;
    4. vector<vector<int>> threeSum(vector<int>& nums) {
    5. if(nums.size() < 3) return res;
    6. sort(nums.begin(), nums.end());
    7. for(int i = 0; i < nums.size() - 2; i ++ ) {
    8. if(i > 0 && nums[i] == nums[i - 1])
    9. continue; // repeat
    10. for(int j = i + 1, k = nums.size() - 1; j < k; j ++ ) {
    11. if (j > i + 1 && nums[j] == nums[j - 1])
    12. continue; // repeat
    13. // a b c d e => a + b + d == 0 => k points to d
    14. while(j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= 0) {
    15. k -- ;
    16. }
    17. if(nums[i] + nums[j] + nums[k] == 0)
    18. res.push_back({nums[i], nums[j], nums[k]});
    19. }
    20. }
    21. return res;
    22. }
    23. };