题解 | #数组中相加和为0的三元组#

数组中相加和为0的三元组

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

  1. 注意先直接排序。
  2. 注意三个指针的遍历。
  3. sort的时间复杂度是 nlogn
  4. 注意中途的剪枝操作,可以避免重复的结果,加快搜索速度。
  5. 注意和最小位的相反数相等的原则。
class Solution {
public:
    vector<vector<int> > threeSum(vector<int> &num) {
        vector<vector<int> > result;

        if(num.size()<3){
            return result;
        }

        sort(num.begin(),num.end());// n(logn)

        for(int i = 0; i< num.size()-2;i++){
            if(num[i] == num[i-1]&&i) continue;//去重复,主要是第二个元素开始有重复的情况

            int l = i+1, r = num.size()-1;

            while(l<r){
                if(num[l]+num[r]==-num[i]){
                    result.push_back({num[i],num[l],num[r]});

                    //优化
                    while(num[l] == num[l+1]&&l+1<r) l++;//i不变去重复 主要是l
                    while(num[r] == num[r-1]&&l<r-1) r--;//i不变去重复 主要是r

                    l++;
                    r--;

                }else if(num[l]+num[r]>-num[i]){
                    r--;
                }else{
                    l++;
                }
            }

        }



        return result;


    }
};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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