15. 三数之和

leetcode力扣刷题打卡

题目:15. 三数之和
描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

思路:

1、先排序,然后用双指针找到和为0的数,并插入set中(去重);
2、set放入vector中,输出答案。

原代码##

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        int n = nums.size();
        sort(nums.begin(), nums.end());
        set<vector<int>> s;
        for (int i = 1; i < n - 1; ++i) {
            int l = 0, r = n - 1;
            while (l < i && r > i) {
                if (nums[l] + nums[i] + nums[r] < 0) {
                    l++;
                } else if (nums[l] + nums[i] + nums[r] > 0) {
                    r--;
                } else {
                    s.insert({nums[l], nums[i], nums[r]});
                    l++;
                    r--;
                }
            }
        }
        vector<vector<int>> ans(s.begin(), s.end());
        return ans;
    }
};

你可能感兴趣的