LeetCode:四数之和【18】

题目描述

给定一个包含 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]
]

题目分析

  四数之和和三数之和求解思路一毛一样。三数之和解析:https://www.cnblogs.com/MrSaver/p/5913336.html

  首先数组进行有序话,接着我们固定a和b,在ab固定的情况下,cd分别向内考虑,调整四数之和

  当c和d把所有情况都遍历完后,b向右移动一格并固定,cd分别向内考虑,调整四数之和

  当b移动到倒数第三位时,b的所有情况就算遍历玩了,最后a向右移动一格并固定

  

  我们知道用双指针模型解决问题,就要将N数之和的前N-2项进行固定,通过移动N项和N-1项来匹配目标值,即五数之和就需要将a,b,c固定,移动d、e

  所谓固定不是不移动,他们仍然需要进行暴力的遍历操作,只是在双指针移动完后再动。

  这道题还是很值得思考的!

Java题解

public class Solution {
public static List<List<Integer>> fourSum(int[] nums, int target) {
//[!]这里引入map用来去重
Map<String,Boolean> map = new HashMap<>();
List<List<Integer>> result = new ArrayList<>(); //[!]数组长度小于4直接返回空
if(nums.length < 4) return result; //[!]做排序以便使用双指针模型
Arrays.sort(nums); int a = 0;
while(a < nums.length - 3) {
int b = a + 1;
while (b<nums.length-2){
int c = b + 1;
int d = nums.length-1;
while(c < d) {
int sum = nums[a] + nums[b] + nums[c]+nums[d];
if(sum == target) {
if(!map.containsKey(nums[a]+"|"+nums[b]+"|"+nums[c]+"|"+nums[d]))
{
map.put(nums[a]+"|"+nums[b]+"|"+nums[c]+"|"+nums[d],true);
result.add(Arrays.asList(nums[a], nums[b], nums[c],nums[d]));
}
}
//[!]一直递增C,直到和等于或大于目标值
if(sum <= target) while(nums[c] == nums[++c] && c < d);
//[!]当值大于目标值时,开始递减D,等于时判断使d跳过重复值
if(sum >= target) while(nums[d--] == nums[d] && c < d);
}
b++;
}
a++;
}
return result;
} public static void main(String[] args) {
int[] nums = {1,0,-1,0,-2,2};
fourSum(nums,0); }
}

  

  

LeetCode:四数之和【18】的更多相关文章

  1. leetcode 四数之和

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

  2. Java实现 LeetCode 18 四数之和

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

  3. 【LeetCode】18.四数之和

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

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

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

  5. Leetcode(18)-四数之和

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

  6. [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 ...

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

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

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

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

  9. 代码随想录第七天| 454.四数相加II、383. 赎金信 、15. 三数之和 、18. 四数之和

    第一题454.四数相加II 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, ...

随机推荐

  1. 压缩及解压命令gzip、bzip2、tar

    1. gzip 描述:压缩与解压缩 用法:gzip[选项]...[文件名称]... 选项:-d 解压 gzip hello.txt     # 文件压缩后名为hello.txt.gz gzip -d ...

  2. C# 保存文件到数据库

    html <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileUploa ...

  3. List.Sort

    static void Main(string[] args) { List<double> valuesList = new List<double>(); valuesLi ...

  4. Python tkinter模块弹出窗口及传值回到主窗口操作详解

    这篇文章主要介绍了Python tkinter模块弹出窗口及传值回到主窗口操作,结合实例形式分析了Python使用tkinter模块实现的弹出窗口及参数传递相关操作技巧,需要的朋友可以参考下 本文实例 ...

  5. May Cook-Off 2019 解题报告

    太气了.Atcoder unrated了. 这一场时间太不友好了.昨天下午一时兴起就去补了一发.题很好,学到好多东西. Chain Reaction 题意:给一个矩阵,这个矩阵是稳定的当且仅当每一个元 ...

  6. LightOJ - 1322 - Worst Case Trie(DP)

    链接: https://vjudge.net/problem/LightOJ-1322 题意: In Computer Science Trie or prefix tree is a data st ...

  7. Centos7 虚拟机里查看IP并启动网卡

    输入ip查询命名 ip addr  也可以输入 ifconfig(centOs7没有ifconfig命令)查看ip,但此命令会出现3个条目,centos的ip地址是ens33条目中的inet值. 发现 ...

  8. windows串口编程Win32,PComm串口开发

    https://blog.csdn.net/u011430225/article/details/51496456 https://blog.csdn.net/eit520/article/detai ...

  9. webapp接口安全设计思路

    在做webqq或者说app开发的时候,免不了会有接口是有权限的(如查询用户敏感信息等),这时接口安全设计思路就非常重要了. 简单一点,在APP中保存登录数据,每次调用接口时传输 程序员总能给自己找到偷 ...

  10. avalon用background-image不起作用,怎么来选取前几个的图片进行渲染

    <span ms-css="{backgroundImage: 'url('+item.image + ')'}" ms-for="($index,item) in ...