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)

思路:

讨论里有说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)的更多相关文章

  1. 【leetcode】Candy(python)

    题目要求的比它的邻居比自己奖励,因此,我们有最少一个多的.所有我们可以找到所有的坑,凹坑例如,存在以下三种情况. 找到全部的凹点后,我们就能够从凹点处開始向左右两个方向依次查找递增序列.当中每一个高的 ...

  2. NoSQL之【MongoDB】学习(三):配置文件说明

    摘要: 继上一篇NoSQL之[MongoDB]学习(一):安装说明 之后,知道了如何安装和启动MongoDB,现在对启动时指定的配置文件(mongodb.conf)进行说明,详情请见官方. 启动Mon ...

  3. 【操作系统】进程间通信(C#)

    原文:[操作系统]进程间通信(C#) 08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xia ...

  4. 【Luogu3444】ORK-Ploughing(贪心)

    [Luogu3444]ORK-Ploughing(贪心) 题面 Luogu 题解 我们知道,如果我们选定了以横向为主,或者纵向为主, 那么就有尽可能减少另一个方向上耕地的次数 所以分开贪心,但是本质相 ...

  5. 【BZOJ1997】Planar(2-sat)

    [BZOJ1997]Planar(2-sat) 题面 BZOJ 题解 很久没做过\(2-sat\)了 今天一见,很果断的就来切 这题不难呀 但是有个玄学问题: 平面图的性质:边数\(m\)的最大值为\ ...

  6. 【Luogu1337】平衡点(模拟退火)

    [Luogu1337]平衡点(模拟退火) 题面 洛谷 题解 和BZOJ3680吊打XXX是一样的.. 但是数据很强呀.. 疯狂调参 各种WA... 很无奈呀.... #include<iostr ...

  7. 【BZOJ1996】合唱队(动态规划)

    [BZOJ1996]合唱队(动态规划) 题面 BZOJ 题解 很容易的一道题 因为每个人不是放在了左边就是放在了右边 所以每次放好的人必定是原序列的一个子串 所以,很容易想到区间\(dp\) 设\(f ...

  8. 【BZOJ1899】午餐(动态规划)

    [BZOJ1899]午餐(动态规划) 题面 BZOJ 题解 我太弱了 这种\(dp\)完全做不动.. 首先,感性理解一些 如果所有人都要早点走, 那么,吃饭时间长的就先吃 吃饭时间短的就晚点吃 所以, ...

  9. 【BZOJ1040】骑士(动态规划)

    [BZOJ1040]骑士(动态规划) 题面 BZOJ 题解 对于每一组厌恶的关系 显然是连边操作 如果是一棵树的话 很显然的树型\(dp\) 但是,现在相当于有很多个基环 也就是在一棵树的基础上再加了 ...

随机推荐

  1. DOS批处理命令-几个固定名称的变量

    批处理中有一些变量的变量名称是固定的,具有特定的意义,接下来,我们来看看这些有特定意义的变量到底有什么意义. 1.%CD%   当前路径的路径名[盘符 + 路径]    - 現在のディレクトリ文字列に ...

  2. js 比较两个日期的大小的例子

    例子,直接比较大小即可 代码如下 复制代码 <script>var st="2009-10-20 14:38:40"var et="2009-10-20 15 ...

  3. oracle经典操作sql

    分页: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WH ...

  4. 2013山东省“浪潮杯”省赛 A.Rescue The Princess

    A.Rescue The PrincessDescription Several days ago, a beast caught a beautiful princess and the princ ...

  5. 简单使用packetbeat

    简单使用packetbeat 标签:packetbeat elasticsearch 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面两篇文章中记录了使用logstash来收集mysql的慢 ...

  6. ECSSHOP表结构

    ECSSHOP表结构 -- 表的结构 `ecs_account_log`CREATE TABLE IF NOT EXISTS `ecs_account_log` (`log_id` mediumint ...

  7. JQ跑马灯

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. java线程安全和线程同步

    第一部分 线程安全(1)——变量安全 http://blog.csdn.net/cuiran/article/details/6150357 第二部分 线程安全(2)——ThreadLocal变量 h ...

  9. jquery返回顶部特效

    <style> p#back-to-top{position:fixed; bottom:100px;right:10px; display: none; } p#back-to-top ...

  10. Java学习小结(1)-数组的创建与传参

    (一)数组的创建 数组的创建包括两部分:数组的申明与分配内存空间. int score[]=null; //申明一维数组 score=new int[3]; //分配长度为3的空间 数组的申明还有另外 ...