C++ 3sum complexity

前端 未结 4 1359
臣服心动
臣服心动 2021-01-24 19:57

I was trying to solve the 3 sum problem in cpp.

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the

4条回答
  •  栀梦
    栀梦 (楼主)
    2021-01-24 20:26

    Here is my solution that finds all unique triplets in O(n^2) run-time.

    class Solution {
    
        public: vector> threeSum(vector& nums) {    
            int len = nums.size();
    
            if(len<3) return {};
    
            sort(nums.begin(), nums.end());
    
            vector> retVector;
    
            int target, begin, end;    
    
            int i=0;
            while(i < len - 2)                  
            {
                int dup;    //  to find duplicates entries
    
                target = -nums[i];
    
                begin = i + 1; end = len - 1;
    
                while (begin < end)
                    {
                        if (nums[begin] + nums[end] < target) begin++;                  
    
                        else if (nums[begin] + nums[end] > target) end--;                   
    
                            else
                            {
    
                                retVector.push_back({nums[i], nums[begin], nums[end]}); 
    
                                //  its time to remove duplicates
    
                                dup=nums[begin];    
    
                                do begin++; while(nums[begin] == dup);   //  removing from front
    
                                dup=nums[end]; 
    
                                do end--; while(nums[end] == dup);     //  removing from back                                                        
                            }                                                                                               
                    }
    
                dup=nums[i];
    
                do i++; while(nums[i] == dup) ;     //  removing all ertries same as nums[i]            
    
            }                                      
            return retVector;
        }     
    };
    

提交回复
热议问题