Leetcode 18-四数之和

embedded/2024/10/18 7:56:24/

题解看代码随想录
/*
1.先排序,为了便于使用双指针,复杂度O(logN)
2.固定最小指针a,b,双指针c和d分别从0和len-1向中间移动
从两端向中间移动是为了使得两个数下标不重合,且可以将时间复杂度从双重循环的O(N4)降到O(N3)
3.终止条件:a>N-3||nums[a]>0(此时四数之和必定大于0)
3.不可以包含重复元素:前后元素相同时跳过
*/
class Solution {
public List<List> fourSum(int[] nums, int target) {
Arrays.sort(nums);
int sum=0,c,d;
List<List> res = new ArrayList<>();
for(int a=0;a<nums.length-3;a++){
//提前终止
//不要判断nums[k] > target 就返回了,三数之和 可以通过 nums[i] > 0 就返回了,因为 0 已经是确定的数了,四数之和这道题目 target是任意值。比如:数组是[-4, -3, -2, -1],target是-10,不能因为-4 > -10而跳过。但是我们依旧可以去做剪枝,逻辑变成nums[i] > target && (nums[i] >=0 || target >= 0)就可以了
if(nums[a]>target&&nums[a]>=0) break;
//对a进行去重
if(a>0&&nums[a]==nums[a-1]) continue;
for(int b=a+1;b<nums.length-2;b++){
//多判断b>a+1是为了避免在[2,2,2,2,2],target=8时没有输出
//所以不判断b=a+1的情况,即b可以等于a
if(b>a+1&&nums[b]==nums[b-1]) continue;
c=b+1;
d=nums.length-1;
while(c<d){
sum=nums[a]+nums[b]+nums[c]+nums[d];
if(sum>target){
d–;
}else if(sum<target){
c++;
}else{
res.add(Arrays.asList(nums[a],nums[b],nums[c],nums[d]));
while(c<d&&nums[c]==nums[c+1]) c++;
while(c<d&&nums[d]==nums[d-1]) d–;
c++;
d–;

                }}}}return res;
}

}


http://www.ppmy.cn/embedded/100916.html

相关文章

HeidiSQL中一些简单mysql语句的含义(一)

一、创建数据库 #创建一个数据库&#xff0c;这个是数据库的名字叫java62 create database java62; #删除数据库java62 drop database java62; #查看当前mysql里的所有数据库 show databases; #创建student表&#xff0c;varchar括号里的是字符串的长度 create table s…

RabbitMQ高级用法

&#x1f4a5; 该系列属于【SpringBoot基础】专栏&#xff0c;如您需查看其他SpringBoot相关文章&#xff0c;请您点击左边的连接 目录 一、发送者的可靠性 1. 生产者重试机制 2. 生产者确认机制【return和confirm机制】 &#xff08;1&#xff09;开启生产者确认 &#x…

Python策略模式:灵活应对多变的业务逻辑

在软件开发中&#xff0c;我们经常遇到需要根据不同情况执行不同算法或行为的情况。这些场景下&#xff0c;如果直接在代码中嵌入大量的条件判断语句&#xff08;如if-else或switch-case&#xff09;&#xff0c;不仅会使代码变得难以维护&#xff0c;还会降低其扩展性和可复用…

Qt第十六章 多媒体Multimedia

文章目录 多媒体音频播放音频录制音频低延迟音效低级音频播放和录制推送和拉取解码压缩音频到内存与音频处理相关的类 视频播放视频处理低级视频帧录制视频与视频处理相关的类 支持的媒体格式 多媒体 cmakelist 添加Multimedia模块 设备信息查询 #include <QAudioDevice>…

ELK

ELK elk介绍前期准备1、修改主机名2、配置/ect/hosts3、检查防火墙selinux是否关闭4、时钟同步 elasticsearch部署介绍1、安装JAVA包2、解压安装包&#xff0c;修改配置文件 elasticsearch集群部署elaticsearch基础API操作1、RestFul API 格式2、查看节点信息3、查看索引信息和…

【Material-UI】深入了解Radio Group中的useRadioGroup Hook

文章目录 一、什么是useRadioGroup&#xff1f;1.1 Hook的返回值 二、useRadioGroup的基本用法2.1 代码示例2.2 代码解析 三、useRadioGroup的应用场景3.1 动态样式调整3.2 高级交互逻辑 四、使用useRadioGroup的最佳实践4.1 保持代码简洁4.2 结合主题定制4.3 注意无障碍设计 五…

【Pyhthon读取 PDF文件表格 ,转为 CSV/TSV/JSON文件】

tabula-py tabula-py 是一个将 PDF 表格转换为 pandas DataFrame 的工具。 tabula-py 是 tabula-java 的包装器&#xff0c;需要您的机器上有 java。 tabula-py 还允许您将 PDF 中的表格转换为 CSV/TSV 文件。 tabula-py 的 PDF 提取准确度与 tabula-java 或 tabula app 相…

(十五)Flink 内存管理机制

在大数据领域,很多开源框架(Hadoop、Spark、Storm)都是基于 JVM 运行,但是 JVM 的内存管理机制往往存在着诸多类似 OutOfMemoryError 的问题,主要是因为创建大量的实例,超过 JVM 的最大堆内存限制,没有被有效的回收。这在很大程度上影响了系统的稳定性,因此很多框架都实…