leetcode 18.四数之和 java

题目

image-20240320222748605

思路

整体在三数之和的基础上进行修改。(所有需要修改的地方,我在代码里加了//改 的注释)

大的一个思路就是,在三数之和的外面再套一层循环。相当于固定前两个数。然后这道题目标值变成一个参数了,不是三数之和的0了。所以我们把a+b+c+d=target的放到res列表里。注意这里求sum 用了long,因为测试案例中有一些数非常大。

需要注意的细节就是a,b,c,d的去重。

a的去重和我们三数之和a的去重一样。j>0 && nums[j] == nums[j - 1]。

b的去重我们修改成了i>j+1 && nums[i] == nums[i - 1]。为啥写成这,而不是i>1呢?看个例子 [-2,-1,-1,1,1,2,2] target=0。如果i>1 就剪枝的话,当j=1,i=2的时候 这时候nums[2]==nums[3]直接就被剪掉了,而我们还没有搜索呢。

c的去重很简单,就是把原来sum>0,改成了sum>target。

d的去重类推。

此外还有一个细节就是,不要判断a > target 就break,因为这次我们的target可能是负数,这和三数之和不一样了。

举个例子:[-4,-3,-2,-1],target=-10。虽然a>target,但是仍然有sum能等于target。如果我们的数组所有的数都是正数,就可以按原来的剪枝。

代码

import java.sql.Array;
import java.util.ArrayList;//leetcode submit region begin(Prohibit modification and deletion)
class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> res = new ArrayList<>();//对数组从小到大进行排序Arrays.sort(nums);for (int j = 0; j < nums.length; j++) {if (nums[j] > 0 && nums[j] > target) //改break;//对a去重if (j > 0 && nums[j] == nums[j - 1]) {continue;}for (int i = j + 1; i < nums.length; i++) {  //改//对b去重if (i > j + 1 && nums[i] == nums[i - 1]) {continue;}int left = i + 1;int right = nums.length - 1;while (right > left) {long sum = (long) nums[j] + nums[i] + nums[left] + nums[right]; //改if (sum > target) {  //改right--;} else if (sum < target) { //改left++;} else {res.add(Arrays.asList(nums[j], nums[i], nums[left], nums[right]));  //改//对c和d去重while (right > left && nums[left] == nums[left + 1]) left++;while (right > left && nums[right] == nums[right - 1]) right--;//找到一个四元组后,继续寻找下一个四元组left++;right--;}}}}return res;}
}
//leetcode submit region end(Prohibit modification and deletion)

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

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

相关文章

uniapp,导航栏(切换项)有多项,溢出采取左滑右滑的形式展示

一、实现效果 当有多项的导航&#xff0c;或者说切换项&#xff0c;超出页面的宽度&#xff0c;我们采取可滑动的方式比较好一些&#xff01;并且在页面右边加个遮罩&#xff0c;模拟最右边有渐变效果&#xff01; 二、实现代码 html代码&#xff1a; <!-- 头部导航栏 --…

[数据集][目标检测]焊接件表面缺陷检测数据集VOC+YOLO格式2292张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2292 标注数量(xml文件个数)&#xff1a;2292 标注数量(txt文件个数)&#xff1a;2292 标注…

使用jscpd对比重复代码

背景 检查项目中重复的代码&#xff0c;或者代码片段 jscpd 两个文件对比 Jscpd 是一个用于检测代码复制和粘贴的工具&#xff0c;它可以比较两个文件并报告相似性的百分比。 以下是如何使用 Jscpd 来比较两个文件的示例&#xff1a; 首先&#xff0c;确保你已经安装了 Nod…

OpenCV4.9.0在Android 开发简介

查看&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用 Clojure 进行 OpenCV 开发简介 下一篇&#xff1a;暂无 引言&#xff1a; OpenCV是一个跨平台计算机视觉库&#xff0c;广泛用于图像处理、计算机视觉和机器学习等领域…

雀巢中国劳动力生态系统上线仪式圆满落幕

3月19日&#xff0c;雀巢中国劳动力生态系统上线仪式在雀巢北京总部举办。双方代表对项目进行了回顾&#xff0c;并就2024年的重点任务展开了深入讨论&#xff0c;共同探讨未来合作的方向和策略。 当天下午&#xff0c;劳动力效能典范游学之走进雀巢活动圆满落幕。活动展示了雀…

数字人解决方案— SadTalker语音驱动图像生成视频原理与源码部署

简介 随着数字人物概念的兴起和生成技术的不断发展&#xff0c;将照片中的人物与音频输入进行同步变得越来越容易。然而&#xff0c;目前仍存在一些问题&#xff0c;比如头部运动不自然、面部表情扭曲以及图片和视频中人物面部的差异等。为了解决这些问题&#xff0c;来自西安…

C# winform修改背景图 控件双向绑定 拖拽打开图片

修改背景图 说明 这里我准备基于百度飞桨PaddleSeg项目的人像分割模块做一个人像抠图&#xff0c;这里顺便用上了双向绑定和图片拖拽打开。 下面就是示例&#xff1a; 用颜色替换 用背景图替换 保存成功后的图片 一、使用百度飞桨PaddleSeg //初始化 引擎engine new Padd…

使用ansible批量修改操作系统管理员账号密码

一、ansible server端配置 1、对于Linux主机配置免密登录ssh-copy-id -i ~/.ssh/id_rsa.pub rootremote_ip 2、在/etc/ansible/hosts文件中添加相应主机IP 3、对于Windows主机需要在/etc/ansible/hosts文件中进行以下配置 192.168.83.132 ansible_ssh_useradministrator an…

【AI】Ubuntu系统深度学习框架的神经网络图绘制

一、Graphviz 在Ubuntu上安装Graphviz&#xff0c;可以使用命令行工具apt进行安装。 安装Graphviz的步骤相对简单。打开终端&#xff0c;输入以下命令更新软件包列表&#xff1a;sudo apt update。之后&#xff0c;使用命令sudo apt install graphviz来安装Graphviz软件包。为…

mysql笔记:24. 主从同步环境搭建

文章目录 主从同步的基本原理主从同步的搭建步骤1. 环境准备2. 配置主服务器&#xff08;Master&#xff09;3. 配置从服务器&#xff08;Slave&#xff09;4. 测试配置5. 常见故障5.1. 主从服务器上的MySQL版本不一致导致失败&#xff1f;5.2. Slave_IO_Running状态异常&#…

Mybatis之自定义映射resultMap

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

深度学习之本地部署大模型ChatGLM3-6B【大模型】【报错】

文章目录 0.前言1.模型下载2.配置环境2.1 下载项目文件2.2 配置环境 3.开始推理4.总结 0.前言 本博客将介绍ChatGLM3-6B大模型在Ubuntu上的本地部署教程 1.模型下载 由于毛毛张的服务器服务无法科学上网&#xff0c;所以模型的相关文件必须现在本地下载好&#xff0c;再上传到…

抖店怎么入驻?2024最新入驻流程,新手必看!

我是电商珠珠 最近&#xff0c;很多新手都来问我&#xff0c;入驻抖店的话有没有什么学习资料啊&#xff0c;入驻都需要什么资质啊等等&#xff0c;我也整理了一份&#xff0c;新手入门必备资料&#xff0c;需要的可以来找我拿。 下面我来说说抖店的入驻资质&#xff0c;以及…

C++ —— 内存管理

目录 1. C内存分布 2. C 内存管理方式 2.1 new 和 delete 操作内置类型 2.2 new 和 delete 操作自定义类型 3. operator new与operator delete函数 4. new和delete的实现原理 5. malloc/free 和 new/delete 的区别 1. C内存分布 首先看一段代码&#xff1a; int globalV…

Vue 3响应式系统详解:ref、toRefs、reactive及更多

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

停车管理系统asp.net+sqlserver

停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库&#xff0c; 功能模块&#xff1a; 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…

赋能数据收集:从机票网站提取特价优惠的JavaScript技巧

背景介绍 在这个信息时代&#xff0c;数据的收集和分析对于旅游行业至关重要。在竞争激烈的市场中&#xff0c;实时获取最新的机票特价信息能够为旅行者和旅游企业带来巨大的优势。 随着机票价格的频繁波动&#xff0c;以及航空公司和旅行网站不断推出的限时特价优惠&#xff…

汽车KL15、KL30、ACC的区别

文章目录 前言一、KL30是什么&#xff1f;二、KL15是什么&#xff1f;KL15信号的演变 三、为啥用KL15、KL30呢&#xff1f; 前言 相信刚接触汽车电子的伙伴都会有一个疑惑&#xff0c;什么是KL15?什么是KL30? 内心一脸懵逼…… KL是德语Klemme的缩写&#xff0c;指的是ECU的…

【Flutter 面试题】Flutter如何进行本地存储和缓存数据?

【Flutter 面试题】Flutter如何进行本地存储和缓存数据&#xff1f; 文章目录 写在前面口述回答补充说明实际案例完整代码示例运行结果详细说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云…

两个免费的wordpress主模板

wordpress免费网站主题 蓝色高端大气上档次的wordpress免费网站主题&#xff0c;首页大图wordpress模板。 https://www.wpniu.com/themes/31.html WP免费模板 用粉色高端大气上档次的WP免费模板&#xff0c;建个网站也不错的。 https://www.wpniu.com/themes/16.html