18四数之和

和三数之和差不多

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> ans;
        sort(nums.begin(), nums.end());

        for( int i=0; i < nums.size(); ++i)
        {
            if( nums[i] > target && nums[i] >= 0 )
                 break;;
            if( i > 0 && nums[i] == nums[i-1])//注意i>0
                continue;

            for( int j=i+1; j < nums.size(); ++j)
            {
                if( nums[i] + nums[j] > target && nums[j] >= 0 )
                    break;
                if(  j>i+1 && nums[j] == nums[j-1])//注意i>j+1
                    continue;
               int left = j+1;
               int right = nums.size() - 1;
                while(left < right)
                {
               if( (long)nums[i] + nums[j] + nums[left] + nums[right] < target) left++;
               if( (long)nums[i] + nums[j] + nums[left] + nums[right] > target) right--;
               if( (long)nums[i] + nums[j] + nums[left] + nums[right] == target )
               {
                ans.push_back(vector<int>{nums[i], nums[j], nums[left], nums[right]} );
                while( nums[left] == nums[left-1] ) left++;
                while( nums[right] == nums[right+1] ) right--;
                left++;
                right--;
               } 
                }
            }
        }
        return ans;
    }
};
posted @ 2025-01-26 21:07  名字好难想zzz  阅读(9)  评论(0)    收藏  举报