给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:

答案中不可以包含重复的四元组。

示例:

给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

满足要求的四元组集合为:

[
   [-1,  0, 0, 1],
   [-2, -1, 1, 2],
   [-2,  0, 0, 2]

]

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/4sum

分析:

跟三数之和的做法是一样的

假设满足要求的数k1<=k2<=k3<=k4

先排序,然后固定k1和k2,通过二分寻找k3和k4

复杂度:O(N*N*log N)

class Solution {
public:
vector<vector<int> > fourSum(vector<int>& a, int t)
{
vector<vector<int> >vv;
vector<int> v;
set<vector<int> > s;
set<vector<int> >::iterator it;
int n=a.size();
if(n<4)
return vv;
sort(a.begin(),a.end());
for(int i=0; i<n-3; i++)
{
for(int j=i+1; j<n-2; j++)
{
int l=j+1;
int h=n-1;
while(l<h)
{
int sum=a[i]+a[j]+a[l]+a[h];
if(sum==t)
{
v.clear();
v.push_back(a[i]);
v.push_back(a[j]);
v.push_back(a[l]);
v.push_back(a[h]);
s.insert(v);
l++;
h--;
}
else if(sum<t)
{
l++;
}
else if(sum>t)
{
h--;
}
}
}
}
if(s.size()!=0)
{
for(it=s.begin(); it!=s.end(); it++)
{
vv.push_back(*it);
}
}
return vv;
}
};

【LeetCode】四数之和【排序,固定k1,k2,二分寻找k3和k4】的更多相关文章

  1. leetcode 四数之和

    这里我们可以考虑将 n 数之和降低为一个数加上 n-1 数之和的问题.依次降低 ,最低是二数之和的问题 ,二数之和问题容易解决.主要在于从 n 到 n-1 的过程需要理解 :下列代码中前几个 if 是 ...

  2. LeetCode:四数之和【18】

    LeetCode:四数之和[18] 题目描述 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c ...

  3. Leetcode(18)-四数之和

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满 ...

  4. 【LeetCode】18. 4Sum 四数之和

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:four sum, 4sum, 四数之和,题解,leet ...

  5. 【LeetCode】四数之和

    [问题]给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找 ...

  6. LeetCode:两数之和、三数之和、四数之和

    LeetCode:两数之和.三数之和.四数之和 多数之和问题,利用哈希集合减少时间复杂度以及多指针收缩窗口的巧妙解法 No.1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在 ...

  7. 【LeetCode】18.四数之和

    题目描述 18. 四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 t ...

  8. [LeetCode] 454. 4Sum II 四数之和II

    Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such t ...

  9. 【LeetCode】 454、四数之和 II

    题目等级:4Sum II(Medium) 题目描述: Given four lists A, B, C, D of integer values, compute how many tuples (i ...

随机推荐

  1. super()函数

    1.简单的使用 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super 来实现,比如: 在上面,A ...

  2. 安装cuda及之后更新环境变量的方法

    安装参考:https://www.cnblogs.com/fanfzj/p/8521728.html 更新环境变量: 将 CUDA.CUPTI 和 cuDNN 安装目录添加到 %PATH% 环境变量中 ...

  3. 按位与(&),或(|),异或(^),取反(~),左移(<<),右移(>>)

    C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 ...

  4. Python的可变类型和不可变类型?

    Python的每个对象都分为可变和不可变可变:列表.字典   不可变:数字.字符串.元组

  5. Linux cp/rm/mv 强制覆盖

    一.Linux下的cp/rm/mv强制覆盖 (一).反斜杠(\)临时取消别名 [root@fz ~]# \cp filename new/filename [root@fz ~]# (二).unali ...

  6. LeetCode 1008. Construct Binary Search Tree from Preorder Traversal

    原题链接在这里:https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal/ 题目: Retu ...

  7. SpringBoot-设置定时任务

    @Scheduled为设置定时任务的注解. 参数常用的为两种: 第一种是fixedRate,表示以一种固定频率去执行,单位为毫秒:例如@Scheduled(fixedRate = 5000)  表示为 ...

  8. vue+elementUI完成注册及登陆

    1. vue怎么引入和配置使用element-ui框架 1.1 使用vue-cli脚手架工具创建一个vue项目 vue init webpack pro01 1.2 npm安装elementUI cd ...

  9. js傻瓜式制作电子时钟

    js傻瓜式制作电子时间 使用到的知识点 setInterval函数 构建函数new Date if判断 demo: //css样式请自行设置 <span id="timer" ...

  10. 守护进程daemon.c

    它的特点是:•不占用控制终端(后台运行)•独立于控制终端•周期性运行 #include<stdio.h>#include<unistd.h>#include<fcntl. ...