1. 程式人生 > >leetcode之4sum

leetcode之4sum

題目:

Given an array nums of n integers and an integer target, are there elements abc, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target

.

Note:

The solution set must not contain duplicate quadruplets.

Example:

Given array nums = [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]
]

程式碼:

#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;


vector<vector<int>> fourSum(vector<int>& nums, int target) {

	int len = nums.size();
	map<int, int> flags;
	vector<vector<int>> result;

	sort(nums.begin(),nums.end());

	for (int i = 0; i < len - 3; i++) {
		for (int j = i + 1; j < len - 2; j++) {
			for (int m = j + 1; m < len - 1; m++) {
				for (int n = m + 1; n < len; n++) {


					vector<int> v;
					int a = nums[i], b = nums[j], c = nums[m], d = nums[n];
					int sum = a + b + c + d;

					if (sum == target) {

							v.push_back(a);
							v.push_back(b);
							v.push_back(c);
							v.push_back(d);
							result.push_back(v);

					}

					if ((n < len - 1) && (nums[n] == nums[n + 1])) n++;
				}
				if ((m < len - 2) && (nums[m] == nums[m + 1]))m++;
			}
			if ((j < len - 3) && nums[j] == nums[j + 1])j++;
		}
		if ((i < len - 4) && nums[i] == nums[i + 1])i++;
	}

	return result;
}

int main() {
	vector<int> v = { 1,0,-1,0,-2,2 };
	vector<vector<int>> vv = fourSum(v, 0);

	for (int i = 0; i < vv.size(); i++) {
		vector<int> a = vv[i];

		for (int j = 0; j < a.size(); j++) {
			cout << a[j] << " ";
		}

		cout << endl;
	}

	int m;
	cin >> m;

	return 0;
}