美文网首页
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-四数之和

    四数之和 方案一 基本类似0015-三数之和,需要手动进行去重复处理。主要可以进行的有三个地方,首先在两个for循...

  • algrithrom

    求和问题,双指针解决 done 两数之和 三数之和 最接近三数之和 四数之和 链表反转问题 done 链表反转 链...

  • 两数之和&三数之和&四数之和&K数之和

    今天看了一道谷歌K数之和的算法题,忽然想起来之前在力扣上做过2、3、4数之和的题,觉得很有必要来整理一下。其实2、...

  • LeetCode 第18题:四数之和

    1、前言 2、思路 采用三数之和的思路,原本三数之和可以分解为:数组中的一个数 + 此数右边的数求两数之和,那么四...

  • 四数之和

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,...

  • 四数之和

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,...

  • 四数之和

    leetcode 18 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是...

  • 四数之和

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/4sum...

  • 四数之和

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/4sum[h...

  • 四数之和

    给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 ...

网友评论

      本文标题:0018-四数之和

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