18.4Sum

2018/10/01 leetcode 共 1198 字,约 4 分钟

title

problem link

Given an array nums of n integers and an integer target, are there elements a, b, c, 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]
]

solution

if (j == i+1 || nums[j] != nums[j - 1]) 使得后面的相等的都是紧挨的

给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d)。


class Solution {
public:
	vector<vector<int>> fourSum(vector<int>& nums, int target) {
		vector<vector<int>> ans;
		sort(nums.begin(), nums.end());
		for (int i = 0; i < nums.size(); i++) {
			if (i == 0 || nums[i] != nums[i - 1]) {
				for (int j = i + 1; j < nums.size(); j++) {
					if (j == i+1 || nums[j] != nums[j - 1]) {
						int sum1 = nums[i] + nums[j];
						int l = j + 1, r = nums.size() - 1;
						while (l < r) {
							int sum = sum1 + nums[l] + nums[r];
							if (sum == target) {
								ans.push_back({ nums[i],nums[j],nums[l],nums[r] });
								while (l < r&&nums[l] == nums[l + 1]) l++;
								while (l < r&&nums[r] == nums[r - 1]) r--;

								l++;
								r--;
							}
							else if (sum < target) {
								l++;
							}
							else {
								r--;
							}
						}
					}
				}
			}
		}
		return ans;
	}
};

Search

    Table of Contents