LeetCode 15. 3Sum 时间复杂度(O( n2))

 时间复杂度O( _n{2})

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        for(int i=0;i<nums.size();++i){
            for(int j=0;j<nums.size()-i-1;++j){
                if(nums[j+1]<nums[j]){
                    int tmp = nums[j+1];
                    nums[j+1] = nums[j];
                    nums[j] = tmp;
                }
            }
        }
        vector<vector<int>> result;
        int one=-1,two=-1,three=-1;
        for(int i=0;i<nums.size();++i){
            if(i>0&&nums[i-1]==nums[i])continue;
            int start = i+1;
            int end = nums.size()-1;
            if(nums[i]>0)break;
            while(start<end){
                if(nums[start]+nums[end]==0-nums[i]){
                    if(!(one==nums[i]&&two==nums[start]&&three==nums[end])){
                        one=nums[i];
                        two=nums[start];
                        three=nums[end];
                        vector<int> oneResult;
                        oneResult.push_back(nums[i]);
                        oneResult.push_back(nums[start]);
                        oneResult.push_back(nums[end]);
                        result.push_back(oneResult);
                    }
                    ++start;
                    --end;
                }else if(nums[start]+nums[end]>0-nums[i]){
                    --end;
                }else {
                    ++start;
                }
            }
        }
        return result;
    }
};

猜你喜欢

转载自blog.csdn.net/ziyue246/article/details/81218172