c++ 双指针法实现三个数的和

c++ 双指针法实现三个数的和_第1张图片

谁让我菜呢,第一反应就是要暴力解,三次循环,但是会遇到一个问题,因为需要去除输出中的重复项。看了大神的解答,才了解了双指针的方法,但是对重复项的去除,还是一个需要详细思考的问题。这道题其实对我最大的启发,应该是排序的使用吧,因为之前也考虑过用双指针,但是如果没有排序的话,没办法提升效率。

class Solution {
public:
    vector> threeSum(vector& nums) {
        vector> ret;
        vector vtemp;
        int len=nums.size();
        sort(nums.begin(),nums.end());
        for(int i=0;i0&&nums[i]!=nums[i-1]))
            {
                int p1=i+1,p2=len-1;
                while(p1vtemp{nums[i],nums[p1],nums[p2]};
                            ret.push_back(vtemp);
                            vtemp.clear();
                        }
                        else if(nums[p1]!=nums[p1-1]){
                            vectorvtemp{nums[i],nums[p1],nums[p2]};
                            ret.push_back(vtemp);
                            vtemp.clear();
                        }
                        p1++,p2--;
                    }
                    else p2--;
                }
            }
        }
        return ret;
    }
};

 

你可能感兴趣的:(算法学习)