4Sum
2015-07-20 15:45
204 查看
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.
解题思路:
(1)对数组进行递增排序
(2)第一个加数从前到后枚举
(3)第二个加数从前到后枚举
(4)设置两个指针分别指向第三个和第四个加数,第三个加数从前往后移动,第四个加数从后往前移动
(5)加数去重的方法
class Solution {
public:
};
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)
解题思路:
(1)对数组进行递增排序
(2)第一个加数从前到后枚举
(3)第二个加数从前到后枚举
(4)设置两个指针分别指向第三个和第四个加数,第三个加数从前往后移动,第四个加数从后往前移动
(5)加数去重的方法
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) { int numsSize = nums.size(); //对数组进行递增排序 sort(nums.begin(), nums.end()); vector<vector<int>> res; for (int i = 0; i < numsSize; i++) { //对元素nums[i]去重 while((i > 0) && (nums[i] == nums[i-1]) && (i < numsSize-3)) { i++; } for (int j = i+1; j < numsSize; j++) { //对元素nums[j]去重 while ((j > i+1) && (nums[j] == nums[j-1]) && (j < numsSize-2)) { j++; } int k = j+1; int m = numsSize-1; while (k < m) { int sum = nums[i]+nums[j]+nums[k]+nums[m]; if (sum < target) { k++; while (nums[k] == nums[k-1] && k < m) { k++; } } else if (sum > target) { m--; while (nums[m] == nums[m+1] && k < m) { m--; } } else { vector<int> temp(4); temp[0] = nums[i]; temp[1] = nums[j]; temp[2] = nums[k++]; temp[3] = nums[m--]; res.push_back(temp); while (nums[k] == nums[k-1] && k < m) { k++; } while (nums[m] == nums[m+1] && k < m) { m--; } } } } } return res; }
};
相关文章推荐
- 可伸缩Web架构与分布式系统2
- 深入集合框架之HashMap源码剖析
- POJ 2109 巧妙解法
- [Effective C++]让自己习惯C++
- 免费下载,ShopNC电商平台系统(+手机版)
- 【阅读】《head first html5》第二章——javascript和DOM
- Android.mk详解
- python之发送邮件
- Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
- Java Method Overloading
- HDU1026,广搜输出路径题
- icvGetUsedValues的详细解析
- 在C++中使用TinyXML2解析xml
- 高效抽取loading,再多的加载页面也不怕
- openlayers 渲染wkt数据,标记中心值并弹窗
- C#下文件转换到二进制流再到十六进制的转换流程
- Find_mirror_dies.hdev相关例程学习
- 【转】织梦为栏目添加图片的方法
- MySQL学习笔记——索引和视图
- oracle sql 按照汉字规则排序