【leetcode】4Sum(middle)
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)
思路:
讨论里有说O(N2)的解法,好像是分为两个2 Sum来做。没仔细看。
下面贴个常规O(n3)解法,注意去重。
vector<vector<int> > fourSum(vector<int> &num, int target) {
vector<vector<int>> ans;
if(num.size() < ) return ans;
int l1, l2, l3, l4;
sort(num.begin(), num.end());
for(l1 = ; l1 < num.size() - ; l1++)
{
if(l1 > && num[l1] == num[l1 - ]) continue; //注意去重复方法 含义是在另外三个数字固定的情况下 同一位置的数字不能重复
for(l4 = num.size() - ; l4 >= l1 + ; l4--)
{
if(l4 < num.size() - && num[l4] == num[l4 + ]) continue;
l2 = l1 + ;
l3 = l4 - ;
while(l2 < l3)
{
if(num[l1]+num[l2]+num[l3]+num[l4] == target)
{
vector<int> partans;
partans.push_back(num[l1]);
partans.push_back(num[l2]);
partans.push_back(num[l3]);
partans.push_back(num[l4]);
ans.push_back(partans);
l2++;
while(num[l2] == num[l2 - ])
{
l2++;
}
l3--;
while(num[l3] == num[l3 + ])
{
l3--;
}
}
else if(num[l1]+num[l2]+num[l3]+num[l4] < target)
{
l2++;
}
else
{
l3--;
}
}
}
}
return ans;
}
大神看起来更统一的代码:
public class Solution {
public List<List<Integer>> fourSum(int[] num, int target) {
List<List<Integer>> results = new LinkedList<List<Integer>>();
if (num == null || num.length < )
return results;
Arrays.sort(num);
for (int s = ; s < num.length - ; s++) {
if (s > && num[s] == num[s - ]) continue;
for (int e = num.length - ; e >= s + ; e--) {
if (e < num.length - && num[e] == num[e + ]) continue;
int local = target - num[s] - num[e];
int j = s + ;
int k = e - ;
while (j < k) {
if (j > s + && num[j] == num[j - ]) {
j++;
continue;
}
if (k < e - && num[k] == num[k + ]) {
k--;
continue;
}
if ((num[j] + num[k]) > local)
k--;
else if ((num[j] + num[k]) < local)
j++;
else
results.add(new ArrayList<Integer>(Arrays.asList(
num[s], num[j++], num[k--], num[e])));
}
}
}
return results;
}
}
【leetcode】4Sum(middle)的更多相关文章
- 【leetcode】Candy(python)
题目要求的比它的邻居比自己奖励,因此,我们有最少一个多的.所有我们可以找到所有的坑,凹坑例如,存在以下三种情况. 找到全部的凹点后,我们就能够从凹点处開始向左右两个方向依次查找递增序列.当中每一个高的 ...
- NoSQL之【MongoDB】学习(三):配置文件说明
摘要: 继上一篇NoSQL之[MongoDB]学习(一):安装说明 之后,知道了如何安装和启动MongoDB,现在对启动时指定的配置文件(mongodb.conf)进行说明,详情请见官方. 启动Mon ...
- 【操作系统】进程间通信(C#)
原文:[操作系统]进程间通信(C#) 08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xia ...
- 【Luogu3444】ORK-Ploughing(贪心)
[Luogu3444]ORK-Ploughing(贪心) 题面 Luogu 题解 我们知道,如果我们选定了以横向为主,或者纵向为主, 那么就有尽可能减少另一个方向上耕地的次数 所以分开贪心,但是本质相 ...
- 【BZOJ1997】Planar(2-sat)
[BZOJ1997]Planar(2-sat) 题面 BZOJ 题解 很久没做过\(2-sat\)了 今天一见,很果断的就来切 这题不难呀 但是有个玄学问题: 平面图的性质:边数\(m\)的最大值为\ ...
- 【Luogu1337】平衡点(模拟退火)
[Luogu1337]平衡点(模拟退火) 题面 洛谷 题解 和BZOJ3680吊打XXX是一样的.. 但是数据很强呀.. 疯狂调参 各种WA... 很无奈呀.... #include<iostr ...
- 【BZOJ1996】合唱队(动态规划)
[BZOJ1996]合唱队(动态规划) 题面 BZOJ 题解 很容易的一道题 因为每个人不是放在了左边就是放在了右边 所以每次放好的人必定是原序列的一个子串 所以,很容易想到区间\(dp\) 设\(f ...
- 【BZOJ1899】午餐(动态规划)
[BZOJ1899]午餐(动态规划) 题面 BZOJ 题解 我太弱了 这种\(dp\)完全做不动.. 首先,感性理解一些 如果所有人都要早点走, 那么,吃饭时间长的就先吃 吃饭时间短的就晚点吃 所以, ...
- 【BZOJ1040】骑士(动态规划)
[BZOJ1040]骑士(动态规划) 题面 BZOJ 题解 对于每一组厌恶的关系 显然是连边操作 如果是一棵树的话 很显然的树型\(dp\) 但是,现在相当于有很多个基环 也就是在一棵树的基础上再加了 ...
随机推荐
- wampserver安装后 mysql 所有数据库丢失的解决方案
事情起源: 晚上十点客户紧急来电,说是网站全部瘫痪.同事登陆数据库一看,Mysql Workbench Database下一片空白.当时我们都傻了. 发现原因: 服务器环境是windows serve ...
- (转)Flickr架构
Flickr(http://www.flickr.com/ ) 是国外一个领先的图片分享网站,现在应该在yahoo门下,感觉yahoo还是有很多好东西,奈何资本要抛弃他了.这个轮回其实挺有意思的,起先 ...
- 字符串转与ASCII码之间的互换
1.字符串转换成ASCII码 public static String stringToAscii(String value) { StringBuffer sbu = new StringBuffe ...
- iOS开发基础之排序
Objective-C 有排序的API,省了我们很多事. 主要有以下3种方法. NSComparator NSArray *unsortedArray = @[@5,@3,@8,@1,@7]; NSA ...
- [java学习笔记]java语言核心----面向对象基础
1.面向对象概述 面向对象是java语言的核心.是对应于面向过程而言的. 面向过程:强调的是过程,即动作.在java中动作就是函数.C语言就是面向过程的. 如:把大象装进冰箱需要几步? 答:需要三步: ...
- C语言中格式化输出的转换说明的fldwidth和precision解析
首先说什么是C语言的格式化输出,就是printf和它的几个变种(grep -E "v?(sn|s|f)printf").像这些函数都有一个参数format,format中可以加点转 ...
- hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( i ...
- 【原】隐藏ultraGrid1指定列
void uGrdAllFlight_InitializeRow(object sender, InitializeRowEventArgs e) { /***********TEST START** ...
- php框架-yii
安装 修改权限问题:runtime;web/assets(mac上) 配置cookie加密串 config/web.php 修改cookieValidationKey L12 配置数据库 控制器: 默 ...
- Android使用百度地图API实现GPS步行轨迹
百度地图Android SDK下载:http://developer.baidu.com/map/sdkandev-download.htm 下面是效果: 采样点取得太频繁所以看起来像是一个个点... ...