4Sum

原创 2015年07月09日 16:39:11

Given an array S of n integers, are there elements a; b; c, and d in S such that a+b+c+d = target?
Find all unique quadruplets in the array which gives the sum of target.
Note:
• Elements in a quadruplet (a; b; c; d) must be in non-descending order. (ie, a  b  c  d)
• The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0.
A solution set is:
(-1, 0, 0, 1)
(-2, -1, 1, 2)
(-2, 0, 0, 2)
中文,求四个数的和,让其等于目标数。
分析:和3sum类似。

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> result;
        vector<int> four;
        sort(nums.begin(),nums.end());
        int i,j,k,t;
        int sum=0;
        int n=nums.size();
        for(i=0;i<n;i++)
        {
            if(i>0&&nums[i]==nums[i-1])
            continue;

            for(j=i+1;j<n;j++)
            {
                if(j>i+1&&nums[j]==nums[j-1])
                continue;
                k=j+1;
                t=n-1;
                while(k<t)
                {   
                    if(k>j+1&&nums[k]==nums[k-1])
                    {
                     k++;
                     continue;    
                    }
                   // if(t<n-1&&nums[t]==nums[t+1])
                   // {
                   //  t--;
                   //  continue;    
                  //  }
                    sum=nums[i]+nums[j]+nums[k]+nums[t];
                    if(sum==target)
                    {
                        four.push_back(nums[i]);
                        four.push_back(nums[j]);
                        four.push_back(nums[k]);
                        four.push_back(nums[t]);
                        result.push_back(four);
                        four.clear();
                        k++;
                    }
                    if(sum<target)
                    {
                       k++; 
                    }
                     if(sum>target)
                    {
                        t--;
                    }
                }
            }



        }
        return result;
    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

Leetcode 454. 4Sum II 四数之和2 解题报告

1 解题思想首先,这是一道远古之前的题的进化版: Leetcode #18 4Sum 四数之和 解题小节+K-Sum思想 但是我不想说那个题了,因为我也记不住了。。这道题意思就是ABCD四个数组,长...
  • MebiuW
  • MebiuW
  • 2016年11月16日 22:45
  • 2775

【LeetCode-面试算法经典-Java实现】【018-4Sum(四个数的和)】

【018-4Sum(四个数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an array S of n integers, are there ele...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月22日 07:22
  • 2416

LeetCode之4Sum(经典)

题目: Given an array S of n integers, are there elements a,b,c, and d in S such that a+b+c+d = target...
  • z702143700
  • z702143700
  • 2015年06月07日 17:06
  • 670

[LeetCode] 4Sum 四数之和解法(本算法n数之和都能解)

[LeetCode] 4Sum 四数之和解法(本算法3数求和能解, n数之和都能解)
  • lm2009200
  • lm2009200
  • 2017年07月27日 13:09
  • 180

LeetCode 之 4Sum 的四种实现

2.1.10 4Sum 描述 Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...
  • u013630349
  • u013630349
  • 2015年08月24日 13:15
  • 732

18. 4Sum (超时)

 题目:4Sum Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...
  • qingqingni1990
  • qingqingni1990
  • 2016年11月05日 10:21
  • 100

4Sum问题及解法

问题描述: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c +...
  • u011809767
  • u011809767
  • 2017年03月08日 14:14
  • 79

LeetCode进阶之路(4Sum)

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = ta...
  • yulingkai88
  • yulingkai88
  • 2016年07月19日 00:08
  • 92

2sum,3sum,4sum问题总结

K Sum Problem Series:  (中文旧版)前言: 做过leetcode的人都知道, 里面有2sum, 3sum(closest), 4sum等问题, 这些也是面试里面经...
  • sole_cc
  • sole_cc
  • 2015年05月23日 20:42
  • 631

每日算法之十六:4sum

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = t...
  • yapian8
  • yapian8
  • 2014年05月25日 21:15
  • 605
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4Sum
举报原因:
原因补充:

(最多只允许输入30个字)