题解 | 三数之和

三数之和

https://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param num int整型vector
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > threeSum(vector<int>& num) {
        // write code here
        sort(num.begin(), num.end());
        int n = num.size();
        vector<vector<int>> result;
        for (int i = 0; i < n; ++i) {
            if (num[i] > 0) continue;
            if (i > 0 && num[i] == num[i - 1]) continue;

            int left = i + 1, right = n - 1;
            while (left < right) {
                if (num[i] + num[left] + num[right] == 0) {
                    result.emplace_back(vector<int> {num[i], num[left], num[right]});
                    while (left + 1 < right && num[left] == num[left + 1]) ++left;
                    while (left < right - 1 && num[right] == num[right - 1]) --right;
                    ++left;
                    --right;
                } else if (num[i] + num[left] + num[right] > 0) {
                    --right;
                } else {
                    ++left;
                }

            }
        }
        return result;
    }
};

全部评论

相关推荐

03-06 18:20
门头沟学院 Java
点赞 评论 收藏
分享
不知道怎么取名字_:看来现在卷的,这种单位都开始提高要求了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务