美文网首页
0018-四数之和

0018-四数之和

作者: liyoucheng2014 | 来源:发表于2019-01-20 21:27 被阅读0次

    四数之和

    方案一


    基本类似0015-三数之和,需要手动进行去重复处理。主要可以进行的有三个地方,首先在两个for循环下可以各放一个,因为一旦当前的数字跟上面处理过的数字相同了,那么找下来肯定还是重复的。之后就是当sum等于target的时候了,我们在将四个数字加入结果res之后,left和right都需要去重复处理,分别像各自的方面遍历即可

    C++-源代码


    #include <iostream>
    #include <queue>
    #include <unordered_map>
    
    using namespace std;
    
    class Solution {
    public:
        vector<vector<int>> fourSum(vector<int>& nums, int target) {
            
            vector<vector<int>> res;
            int n = nums.size();
            sort(nums.begin(), nums.end());
            
            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 left = j + 1;
                    int right = n - 1;
                    while (left < right) {
                        
                        int sum = nums[i] + nums[j] + nums[left] + nums[right];
                        if (sum == target) {
                            
                            vector<int> out{nums[i], nums[j], nums[left], nums[right]};
                            res.push_back(out);
                            
                            while (left < right && nums[left] == nums[left + 1]) {
                                
                                ++left;
                            }
                            
                            while (left < right && nums[right] == nums[right - 1]) {
                                
                                --right;
                            }
                            
                            ++left;
                            --right;
                        }
                        else if (sum < target) {
                            
                            ++left;
                        }
                        else {
                            
                            --right;
                        }
                    }
                }
            }
            
            return res;
        }
    };
    

    参考Grandyang

    相关文章

      网友评论

          本文标题:0018-四数之和

          本文链接:https://www.haomeiwen.com/subject/xrufjqtx.html