[leetcode] 18. 四数之和

文章目录

  • 题目描述
  • 解题方法
    • 排序 + 双指针
      • java代码
  • 相似题目

题目描述

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • abcd 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

提示:

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

解题方法

排序 + 双指针

本题的解题思路和三数之和相似。将数组按照从小到大排序后,最外层和第二层采用单指针从起始位置开始遍历,最内层采用左指针和右指针根据四数之和的大小不断向中间位置靠拢。具体细节就不过多赘述了,没看过三数之和的童鞋可以先去看三数之和和最接近的三数之和。

需要注意的是题目中的数字之和可能会超过整型范围,所以存储的数字之和类型为长整型。

java代码

public List<List<Integer>> fourSum(int[] nums, int target) {Arrays.sort(nums);List<List<Integer>> list = new ArrayList<>();for (int i = 0; i < nums.length - 3; i++) {// 与上一个数字相等跳过本次循环if (i > 0 && nums[i] == nums[i - 1]) {continue;}for (int j = i + 1; j < nums.length - 2; j++) {// 与上一个数字相等跳过本次循环if (j > i + 1 && nums[j] == nums[j - 1]) {continue;}long num1 = nums[i] + nums[j];int l = j + 1;int r = nums.length - 1;while (l < r) {// 化为长整型存储数字之和long totalSum = num1 + (long) nums[l] + (long) nums[r];if (totalSum < (long) target) {// 与上一个数字相等跳过本次循环while (l < r && nums[l + 1] == nums[l]) {l++;}l++;} else if (totalSum > (long) target) {// 与上一个数字相等跳过本次循环while (l < r && nums[r - 1] == nums[r]) {r--;}r--;} else {List<Integer> list1 = new ArrayList<>();list1.add(nums[i]);list1.add(nums[j]);list1.add(nums[l]);list1.add(nums[r]);list.add(list1);// 与上一个数字相等跳过本次循环while (l < r && nums[l + 1] == nums[l]) {l++;}// 与上一个数字相等跳过本次循环while (l < r && nums[r - 1] == nums[r]) {r--;}l++;r--;}}}}return list;
}

时间复杂度: O ( N 3 ) O(N^3) O(N3) N N N n u m s nums nums数组长度。
空间复杂度: O ( 1 ) O(1) O(1)

相似题目

[leetcode] 1. 两数相加
[leetcode] 15. 三数之和
[leetcode] 16. 最接近的三数之和


  • 个人公众号
    个人公众号
  • 个人小游戏
    个人小游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、Kotlin 内置类型

1. 基本类型 1.1 Kotlin 和 Java 的基本类型对比 KotlinJava字节Bytebyte/Byte整型Int & Longint/Integer & long/Long浮点型Float & Doublefloat/Float & double/Double字符Charchar/Chararcter字符串StringString 1.2 定义变量 1.2.1 val 只读变量 &…

qt初入门5:字体设置和元对象系统的练习

空闲时间&#xff0c;参考课本demo&#xff0c;做一下练习。 字体的颜色主要用QPalette类&#xff0c;调色板的作用&#xff0c;控制着窗口部件的颜色和外观&#xff0c;包括背景色、前景色、文本颜色、边框颜色等。 字体的显示样式主要用Font类&#xff0c;用于管理字体。 元…

python三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1…

无限学模式-“重塑科研学习路径:ChatGPT应用实战课,开启高效率、高创新的科研之旅!“

ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题&#xff0c;ChatGPT都能为您提供实用且高质量的建议和指导&#xff0c;提高编程效率和准确性。此外&#xff0c;ChatGPT是一位出色的合作伙伴&#xff0c;可以为您提供论文写作的…

【研0日记】24.01.25

回家倒数第6天 受不了了&#xff0c;不想写了&#xff0c;这群b怎么这么能写 用latex写了个伪代码&#xff0c;有点好玩 \usepackage[ruled,linesnumbered]{algorithm2e} \begin{algorithm}[ht] \caption{Pipeline of Kernel Iteration in K-Net.} \label{alg:alg1} …

2024年软考报名时间及条件,小白必看

不少考生开始准备报名2024年软件水平考试&#xff0c;那么报名软考有没有学历、专业以及工作经验等方面的限制呢?今天就给大家梳理下2024年软考考试&#xff0c;若有变更&#xff0c;也会及时更新内容。 免费送备考资料。联系我 2024年软考考试时间 2024年软考有两次考试&a…

在Java中如何优雅使用正则表达式?

在Java中如何优雅使用正则表达式&#xff1f; 一、正则表达式的基本概念与用途 1.1 正则表达式的简介 正则表达式&#xff0c;又称规则表达式。&#xff08;英语&#xff1a;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是计算…

不通过代码绕过浏览器跨域检测(权宜之策)

通过属性找到浏览器可执行程序目录 然后在cmd该目录下输入&#xff1a; msedge.exe --args --disable-web-security --user-data-dirD:\temp上述代码是以edge浏览器为例&#xff0c;找到的可执行文件名为msedge.exe&#xff0c;最后的"D:\temp"为自己新建的一个有效…

深入理解badblocks

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认 三、重要参数详解3.1、查询支持的参数3.2、参数说明 四、实例4.1、全面扫描4.2、破坏性写入并修复4.3、非破坏性写入测试 五、实现原理六、注意事项 团队博客: 汽车电子社区 一、概述 badblocks命令是…

代码随想录算法训练营第十六天|104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度 思路&#xff1a;这道题最开始的时候&#xff0c;我想的是用前序遍历的思路来做&#xff0c;整个过程有剪枝的过程&#xff0c;弄了半天没写出来&#xff0c;主要是剪枝没写对&#xff01;最大深度是叶子节点的高度&#xff0c;可以使用后序遍历来做。 cl…

el-table 动态渲染多级表头;一级表头根据数据动态生成,二级表头固定

一、表格需求&#xff1a; 实现一个动态表头&#xff0c;一级表头&#xff0c;根据数据动态生成&#xff0c;二级表头固定&#xff0c;每列的数据不一样&#xff0c;难点在于数据的处理。做这种表头需要两组数据&#xff0c;一组数据是实现表头的&#xff0c;另一组数据是内容…

Web网页生成桌面应用

前言&#xff1a;网页生成桌面指的是将一个网页保存为桌面应用程序的形式&#xff0c;使得用户可以在桌面上直接打开该网页&#xff0c;而不必通过浏览器打开。这种桌面应用程序一般具有独立的窗口、菜单、工具栏等界面元素&#xff0c;能够提供更加方便快捷的使用体验。 实现…

【pytorch】pytorch学习笔记(续1)

p22&#xff1a;1.加减乘除&#xff1a; &#xff08;1&#xff09;add(a,b)&#xff1a;等同于ab。 &#xff08;2&#xff09;sub(a,b)&#xff1a;等同于a-b。 &#xff08;3&#xff09;mul(a,b)&#xff1a;等同于a*b。 &#xff08;4&#xff09;div(a,b)&#xff1a…

Go 接口

接口概览 接口大概理解 接口类型是队其他类型行为的概括与抽象 接口类型中&#xff0c;包含函数声明&#xff0c;但没有数据变量接口的作用通过使用接口&#xff0c;可以写出更加灵活和通用的函数&#xff0c;这些函数不用绑定在一个特定的类型实现上Go 接口特征 很多面向对象…

验厂的类型的流程

【验厂的类型的流程】 在全球贸易一体化的进程中&#xff0c;验厂已经成为出口外贸企业真正与世界接轨的一道门槛&#xff0c;并且通过近几年的不断发展&#xff0c;验厂也逐渐为企业所熟知和充分重视。 如何正确理解验厂标准&#xff0c;实施有效的方案&#xff0c;满足验厂的…

PID控制算法,带C语言源码实现

1 PID简介 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&#xff09;、Differential&#xff08;微分&#xff09;的缩写。PID控制算法是结合比例、积分和微分三种环节于一体的控制算法。PID算法是连续系统中技术最为成熟、应用最为…

面向对象和面向过程:C语言中的两种编程范式

C语言是一种结构化的编程语言&#xff0c;它支持两种不同的编程范式&#xff1a;面向对象和面向过程。编程范式是一种编程思想或风格&#xff0c;它决定了程序的组织和设计方式。本文将探讨面向对象和面向过程在C语言中的定义、特点、优缺点以及应用场景&#xff0c;并给出一些…

gitlab runner 安装、注册、配置、使用(Docker部署)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

SQL 系列教程(一)

目录 SQL 简介 SQL 是什么 SQL 能做什么 SQL 语法 数据库表 SQL 语句 注意事项 SQL 语句后面的分号 一些最重要的 SQL 命令 SQL SELECT 语句 SQL SELECT 语句 演示数据库 SELECT Column 实例 SELECT * 实例 SQL SELECT DISTINCT 语句 SQL SELECT DISTINCT 语句…

【工具使用-Everything】everything只能搜到文件夹,无法搜到文件

一&#xff0c;问题现象 everything搜索时&#xff0c;只能搜索到文件夹&#xff0c;无法搜索到文件夹下的文件。 二&#xff0c;问题原因 everything搜索设置问题&#xff0c;设置为"文件夹"导致 三&#xff0c;解决方法 将搜索选项设置为“所有”即可&#x…