(leetcode) 4sum

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        int n = nums.size();
        vector<vector<int>> ans;
        
        for(int i = 0;i < n - 3;++i)
        {
            if(i > 0 && nums[i] == nums[i-1]) continue;
            for(int j = i+1; j < n -2 ;++j)
            {
                if(j > i+1 && nums[j] == nums[j-1]) continue;
                int lo = j + 1;
				int hi = n-1;
                while(lo < hi)
                {
                    if(nums[lo] + nums[hi] < target - nums[i] - nums[j])
                        ++lo;
                    else if(nums[lo] + nums[hi] > target - nums[i] - nums[j])           
                        --hi;
                    else
                    {
						vector<int> tmp(4,-1);
						tmp[0] = nums[i];
						tmp[1] = nums[j];
						tmp[2] = nums[lo];
						tmp[3] = nums[hi];
						ans.push_back(tmp);
						//quchong

                        int k = lo+1;
                        while(k < hi && nums[k] == nums[lo])k++;
                        lo = k;
                         
                        k = hi-1;
                        while(k > lo && nums[k] == nums[hi])k--;
                        hi = k;
                    }
                }
                
            }
        }
        return ans;
    }
};

 

posted @ 2015-09-08 11:07  sunalive  Views(134)  Comments(0)    收藏  举报