leetcode 018 —— 4Sum (nsum)

原创 2015年07月09日 15:21:02

Given an array S of n integers, are there elements abc, 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)

思路:可以上升到Nsum的问题,在3sum的基础上再加一个循环,或者,当为nsum时,采用递归实现。

4sum就不玩了,直接上nSum

class Solution {
public:
	vector<vector<int>> nSum(vector<int>& nums, int target,int n) {
		vector<vector<int>> res;
		vector<int> path;
		sort(nums.begin(), nums.end());
		scan(n, 0, target, path,nums, res);
		return res;
	}
	void scan(int level, int start, int target, vector<int> path, vector<int>& nums,
		vector<vector<int>> &res)
	{
		if (level > 2){  //level表示在start与n-1之间删选level个元素
			for (int i = start; i < nums.size()-level+1; i++){
				if (i>0 && nums[i] == nums[i - 1])
					continue;
				path.push_back(nums[i]);
				scan(level - 1, i+1 , target - nums[i],path,nums,res);
				path.pop_back();
			}
		}
		if (level == 2){
			int l = start;
			int r = nums.size() - 1;

			while (l < r){
				int sum = nums[l] + nums[r];
				if (sum == target){
					//path.push_back(nums[start-1]);
					path.push_back(nums[l]);
					path.push_back(nums[r]);
					res.push_back(path);
					//path.pop_back();
					path.pop_back();
					path.pop_back();
					
					while (l < r&&nums[l] == nums[l + 1])
						l++;
					while (l < r&&nums[r] == nums[r - 1])
						r--;
					l++;
					r--;
				}
				else if (sum > target)
					r--;
				else
					l++;
			}
			return;
		}
	}
};


leetcode 题解 || 3Sum 问题

problem: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? ...
  • hustyangju
  • hustyangju
  • 2015年03月18日 19:11
  • 345

[LeetCode]3Sum,解题报告

题目 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find al...
  • zinss26914
  • zinss26914
  • 2014年06月13日 23:42
  • 2419

<LeetCode OJ> (1 / 15 / 16 / 18) NSum问题集合

Two Sum My Submissions Question Total Accepted: 164289 Total Submissions: 833770 Difficulty: Med...
  • EbowTang
  • EbowTang
  • 2015年12月15日 20:45
  • 1114

[LeetCode]3Sum Closest题解

3sum Closest: Given an array S of n integers, find three integers in S such that the sum is closes...
  • fong_613
  • fong_613
  • 2017年10月16日 17:08
  • 53

【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...
  • messiran10
  • messiran10
  • 2015年11月05日 09:51
  • 240

[LeetCode] 018. 4Sum (Medium) (C++/Java/Python)

[LeetCode] 018. 4Sum (Medium) (C++/Java/Python)
  • hcbbt
  • hcbbt
  • 2015年03月04日 17:57
  • 2914

[C++]LeetCode: 71 4Sum && kSum总结

题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d ...
  • cinderella_niu
  • cinderella_niu
  • 2015年01月06日 10:43
  • 1677

leetcode 15 3Sum

问题https://leetcode.com/problems/3sum/解法《!64ms》先对数组排序O(nlogn), 然后从前往后枚举第一个数,从后往前枚举第二个数,在第一个数和第二个数之间二分...
  • galaxy_wolf
  • galaxy_wolf
  • 2016年04月11日 19:57
  • 109

LeetCode[Array]----3Sum

3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Fi...
  • whiterbear
  • whiterbear
  • 2016年04月18日 21:20
  • 562

[leetcode] 求和问题总结(2Sum, 3Sum, 4Sum, K Sum)

前言: 做过leetcode的人都知道, 里面有2sum, 3sum(closest), 4sum等问题, 这些也是面试里面经典的问题, 考察是否能够合理利用排序这个性质, 一步一步得到高效的算法....
  • bhwolf1987
  • bhwolf1987
  • 2013年11月03日 14:07
  • 8950
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode 018 —— 4Sum (nsum)
举报原因:
原因补充:

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