15. 三数之和

题目

15. 三数之和 官方题解

 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
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> res;
        sort(nums.begin(), nums.end());

        int n = nums.size();
        for (int i = 0; i < n - 2; i ++) {
            if (i > 0 && nums[i] == nums[i - 1]) continue;

            int j = i + 1, k = n - 1;
            while (j < k) {
                if (nums[i] + nums[j] + nums[k] < 0) {
                    j ++;
                } else if (nums[i] + nums[j] + nums[k] > 0) {
                    k --;
                } else {
                    res.push_back({nums[i], nums[j], nums[k]});
                    while (j < k && nums[j + 1] == nums[j]) j ++;
                    while (j < k && nums[k - 1] == nums[k]) k --;
                    j ++, k --;
                }
            }
        }

        return res;
    }
};