算法008:四数之合

news2024/10/25 1:22:16

四数之和. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/4sum/description/

在前面的两个题中,我们已经完成了两数之和和三数之和,到本题四数之和,其实也只是前几个题的延伸,在三数之和的基础上再固定一个数字。

先固定一个数字,剩下三个数按照三数之和的方式来完成。

对于三数之和,则是固定一个数,剩下的两个数再按照双指针的方式来求和。

和三数之和一样的问题,最难的部分在于去重的部分,我们从内向外依次去重:

  • 两数之和,双指针往前(往后)遍历到一样的元素的时候,可以直接再往前(往后)移动一次,并且规定好范围,不要越界
  • 三数之和和四数之和,固定的那个数往后遍历的时候,遇到重复的元素需要再次移动一次,防止循环重复

代码:

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> ret = new ArrayList<>();
        Arrays.sort(nums);
        int n = nums.length;
        for(int i = 0 ; i < n - 2;){
            for(int j = i + 1 ; j < n - 1;){
                int left = j + 1;
                int right = n - 1;
                long aim = (long)target - nums[i] - nums[j];
                while(left < right){
                    int sum = nums[left] + nums[right];
                    if(sum < aim){
                        left++;
                    }else if(sum > aim){
                        right--;
                    }else{
                        ret.add(new ArrayList<Integer>(Arrays.asList(nums[i],nums[j],nums[left],nums[right])));
                        left++;
                        right--;
                        while(left < right && nums[left - 1] == nums[left]){
                            left++;
                        }
                        while(left < right && nums[right + 1] == nums[right]){
                            right--;
                        }
                    }
                }
                j++;
                while(j < n && nums[j - 1] == nums[j]){
                    j++;
                }
            }
            i++;
            while(i < n && nums[i - 1] == nums[i]){
                i++;
            }
        }
        return ret;
    }
}

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

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

相关文章

【linux】奇怪?linux搭建离线仓库为什么执行yum grouplist没有信息呐?

奇怪&#xff1f;linux搭建离线仓库为什么执行yum grouplist没有信息呐&#xff1f; 正常现象如下&#xff1a; 怎么样才能解决这个问题&#xff1f; 1、在同系统、同正常环境下查找一下groups.xml find / -name "*groups*.xml"可以看到下面有很多groups.xml 2、在…

Transformer 模型的 PyTorch 实现

Google 2017年的论文 Attention is all you need 阐释了什么叫做大道至简&#xff01;该论文提出了Transformer模型&#xff0c;完全基于Attention mechanism&#xff0c;抛弃了传统的RNN和CNN。 我们根据论文的结构图&#xff0c;一步一步使用 PyTorch实现这个Transformer模型…

智慧乡村和美人家信息化系统

一、简介 智慧乡村和美人家信息化系统是一个综合管理平台&#xff0c;集成了首页概览、一张图可视化、数据填报、智能评估、便捷申报、公开公示、任务管理、活动发布和灵活配置等功能。该系统不仅提升了乡村管理效率&#xff0c;也优化了家庭生活的便捷性。通过一张图&#xf…

搭建群辉AudioStation音乐库

目录 1、安装套件 2、配置歌词插件 3、配置音乐库 4、PC端使用 5、手机APP (1)DS Audio (2)音流 6、关于歌曲信息及封面 (1)歌词 (2)封面 作为音乐爱好者,在NAS上存了大量的无损音乐,用文件流量的方式播放,体验未免欠佳。这次我们打造自己的音乐库,随时随…

360vr党建线上主题展立体化呈现企业的文化理念和品牌形象

在现代科技的引领下&#xff0c;艺术与VR虚拟现实技术相融合必将成为趋势&#xff0c;深圳VR公司华锐视点荣幸地推出VR艺术品虚拟展厅&#xff0c;为您带来前所未有的艺术观赏体验。体验者足不出户即可置身于一个充满创意与灵感的虚拟艺术空间。 我们深入了解每一位客户的需求与…

数据库7大约束

4 约束 数据类型 什么是数据&#xff1a;数字、小说、图片、音乐、视频 针对不同的数据展现形式&#xff0c;我们对数据进行了分类&#xff0c;数据类型。 数字类型&#xff1a;存放数字的&#xff0c;int浮点型类型&#xff1a;存放数字&#xff0c;float&#xff0c;小数字…

大数据关联规则算法

关联性&#xff08;Association&#xff09; 定义&#xff1a;指一个变量能够提供有关另一个变量的信息。特点&#xff1a;关联性是一个广泛的概念&#xff0c;它可以包括直接的、间接的、强的或弱的联系。 相关性&#xff08;Correlation&#xff09; 定义&#xff1a;指两个…

低版本火狐浏览器报错:class is a reserved identifier

低版本火狐浏览器报错&#xff1a;class is a reserved identifier 原因&#xff1a;react-dnd&#xff0c;dnd-core 等node包的相关依赖有过更新&#xff0c;使得在低版本火狐浏览器中不支持 class 解决方法&#xff1a;在使用webpack打包构建时&#xff0c;编译排除node_modu…

SonarQube集成Jenkins平台搭建

SonarQube平台搭建 一、项目搭建的必要条件 SonarQube 8.9.10 previous LTS 依据公司现有服务目前的Jdk版本1.8&#xff0c;需要选择一个适用的长期支持版本&#xff0c;我在这里选用的是SonarQube 8.9.10 previous LTS。下载地址&#xff1a;Download Previous SonarQube Ver…

2000-2022年全国平均气温数据,多年份,多字段可查询,可预览数据

基本信息. 数据名称: 全国平均气温数据 数据格式: Shp、Excel 数据时间: 2000-2022年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1xzqhdm行政区划代码2xzqhmc行政区划名称3qw2001m01…

E36150系列 自动量程台式电源

E36150系列 自动量程台式电源 <<<KEYSIGHT是德科技>>> “ Keysight E36150 系列自动量程台式直流电源包含两个型号&#xff0c;其单通道输出功率可达 800 W。 E36150 系列可输出高达 60 V 的电压和 80 A 的电流&#xff0c;其可用功率足以满足您的测试需…

MySQL之优化服务器设置(四)

优化服务器设置 InnoDB的IO配置 双写缓冲(Doublewrite Buffer) InnoDB用双写缓冲来避免页没写完整所导致的数据损坏。当一个磁盘写操作不能完整地完成时&#xff0c;不完整的页写入就可能发生&#xff0c;16KB的页可能只有一部分被写到磁盘上。有多种多样的原因(崩溃、Bug&am…

阿里云PAI大模型评测最佳实践

作者&#xff1a;施晨、之用、南茵、求伯、一耘、临在 背景信息 内容简介 在大模型时代&#xff0c;随着模型效果的显著提升&#xff0c;模型评测的重要性日益凸显。科学、高效的模型评测&#xff0c;不仅能帮助开发者有效地衡量和对比不同模型的性能&#xff0c;更能指导他…

OS复习笔记ch11-3

接下来&#xff0c;我们简单地回顾一下I/O缓冲&#xff08;之前在ch5-4-1的时候有提到过&#xff09; I/O缓冲 背景&#xff1a; 假设进程I/O需要在灰色区间读写&#xff0c;而灰色区间由于阻塞而被对换出去了&#xff0c;此时OS找不到对应的内存地址&#xff0c;这样就容易发…

Shell脚本、相关命令;重定向、管道符、变量相关命令讲解

目录 Shell脚本 概念 执行命令流程的交互区别 交互式 非交互式 Shell脚本应用场景 Shell的作用 Shell的作用 —— 命令解释器&#xff0c;“翻译官” 列出系统中全部解释器 实验 脚本的基本书写格式和执行命令 在子bash下执行脚本 指定解释器的方式执行脚本 指定…

nodejs的await和async

例子 const fs require(fs).promises;async function getFileContent(filePath) {const content await fs.readFile(filePath, utf8); console.log(content); // 这行会在文件读取完成后执行 }getFileContent(example.txt); console.log(123); // 这行会立即执行输出结果&…

/usr/bin/ld: 当搜索用于 /lib/i386-linux-gnu/libcuda.so 时跳过不兼容的 -lcuda

/usr/bin/ld: 当搜索用于 /lib/i386-linux-gnu/libcuda.so 时跳过不兼容的 -lcuda ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/023dbdeb215b4b4580f7f54706e32af9.pn当使用unsloth做微调时&#xff0c;发现找不到libcuda&#xff0c;很自然想到需要软链接到最新…

2024最新AI大模型-LLm八股合集(八)-Transformer模型

更多2024最新AI大模型-LLm八股合集可以拉到文末&#xff01;&#xff01;&#xff01; MHA & MQA & MGA &#xff08;1&#xff09;MHA 从多头注意力的结构图中&#xff0c;貌似这个所谓的多个头就是指多组线性变换层&#xff0c;其实并不是&#xff0c;只有使用了一…

PS去除logo背景

一、打开图片 二、点击通道选择色差最明显的通道 三、复制通道 四、点击载入 五、反选ctrlshifti&#xff08;鼠标右键亦可&#xff0c;然后调整下范围&#xff09; 六、点击图层&#xff0c;复制图层&#xff08;ctrlJ&#xff09; &#xff08;先确保图层是解锁的&#xff0…

二叉树-输出二叉树的右视图

目录 一、问题描述 二、解题思路 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 这里右视图类似于立方体的右视图&#xff0c;从右边看每一层第一个看到的结点的集合就是需要返回的结果&#xff0c;注意返回的结点是有相对顺序的&#xff0c;比如上面的1,3,5对应第…