【C++】双指针算法:四数之和

1.题目

2.算法思路

这道题目十分困难,在leetcode上的通过率只有36%,大家要做好心理准备。

在做个题目前强烈建议大家先看看我的上一篇博客:有效三角形个数,看完之后再去leetcode上写一写三数之和,搞懂那两个题目之后再来看这道题目就比较容易了。

四数之和实际上和三数之和的思路差不多,只不过比三数之和多了一个步骤。

首先我们需要把这个数组排一下序,然后固定一个数a,然后在剩下的区间利用三数之和的思路解决。

三数之和的思路:

固定一个数b,然后定义两个指针left和right,分别从两端遍历数组,如果这四个数大于目标值则right--。如果这四个数小于目标值则left++。如果等于目标值,则记录下来,更新right或left,继续遍历。在这个过程中要注意:1.不漏 2.去重 3.防止整型溢出。

3.代码和提交结果

3.1提交结果

3.2代码

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> num_s;sort(nums.begin(),nums.end());for(int i=nums.size()-1;i>=3;){//固定数along long nums1=nums[i];for(int j=i-1;j>=2;){//固定数blong long nums2=nums[j];//防止计算四数之和时整型溢出int right=j-1,left=0;while(right>left){//计算四数之和if(nums1+nums2+nums[left]+nums[right]<target) left++;else if(nums1+nums2+nums[left]+nums[right]>target) right--;else{num_s.push_back({nums[left],nums[right],(int)nums2,(int)nums1});do{right--;//去重}while(right>left&&nums[right]==nums[right+1]);}}do{j--;//去重}while(j>=2&&nums[j]==nums[j+1]);}do{i--;//去重}while(i>=3&&nums[i]==nums[i+1]);}return num_s;}
};

时间复杂度分析:

三次遍历数组相互嵌套,所以时间复杂度:O(n^3)。

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

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

相关文章

JavaEE 初阶篇-深入了解 Junit 单元测试框架和 Java 中的反射机制(使用反射做一个简易版框架)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Junit 单元测试框架概述 1.1 使用 Junit 框架进行测试业务代码 1.2 Junit 单元测试框架的常用注解&#xff08;Junit 4.xxx 版本&#xff09; 2.0 反射概述 2.1 获…

计算机毕业设计php自行车在线租赁管理系统-vue+mysql

本系统的开发使获取自行车在线租赁管理系统信息能够更加方便快捷&#xff0c;同时也使自行车在线租赁管理系统管理信息变的更加系统化、有序化。系统界面较友好&#xff0c;易于操作。 自行车在线租赁管理系统&#xff0c;主要的模块包括首页、个人中心、用户管理、会员管理、自…

软件系统安全设计(安全保证措施)

软件安全保证措施word 软件所有全套资料获取进主页或者本文末个人名片直接。

C++之set/map相关实现

看着上面的图片&#xff0c;你可能对set和map的多样变化产生疑惑&#xff0c;下面我们就来详细讲解他们的区别以及实现 一.set/map 首先&#xff0c;在这里我们要声明&#xff0c;如果你对二叉搜索树一点都不了解的话&#xff0c;建议你先去将搜索二叉树学会再来学习这里的内…

ArkTS开发原生鸿蒙HarmonyOS短视频应用

HarmonyOS实战课程“2024鸿蒙零基础快速实战-仿抖音App开发&#xff08;ArkTS版&#xff09;”已经于今日上线至慕课网&#xff08;https://coding.imooc.com/class/843.html&#xff09;&#xff0c;有致力于鸿蒙生态开发的同学们可以关注一下。 课程简介 本课程以原生鸿蒙Ha…

【Canvas与艺术】新制无底图安布雷拉暗黑系桌面(1920*1080)

【主要变化】 1.去掉底图&#xff0c;改为金丝正六边形组合而成的网格&#xff1b; 2.将安布雷拉标志调暗&#xff1b; 【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html;…

深入学习@TableField注解:MyBatis-Plus中的字段映射技术解析

深入学习TableField注解&#xff1a;MyBatis-Plus中的字段映射技术解析 一、 介绍1、TableField注解的作用2、TableField注解的属性3、实际应用场景4、注意事项5、示例代码6、结论 一、 介绍 在基于Java的持久化框架中&#xff0c;实体类的字段映射到数据库表的列是一个基本操…

力扣HOT100 - 78. 子集

解题思路&#xff1a; class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> lists new ArrayList<>(); // 解集lists.add(new ArrayList<Integer>()); // 首先将空集加入解集中for(int i 0; i < n…

Mac 安装 JDK21 流程

一、下载JDK21 访问Oracle官方网站或选择OpenJDK作为替代品。Oracle JDK从11版本开始是商业的&#xff0c;可能需要支付费用。OpenJDK是一个免费开源选项。 Oracle JDK官方网站&#xff1a;Oracle JDK Downloads OpenJDK官方网站&#xff1a;OpenJDK Downloads 这里以JDK21为…

大模型部署之前端页面编写框架,我选streamlit

简介 Streamlit是一个开源的Python库,它让数据科学家和开发者可以快速创建和分享美观的,交互式的Web应用。无需拥有前端开发经验,任何人都可以使用Streamlit将数据脚本转换为分享给非技术用户的交互式Web应用。它简化了Web应用的开发流程,让开发者能够专注于数据和业务逻辑…

FP16、BF16、INT8、INT4精度模型加载所需显存以及硬件适配的分析

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

EDA(一)Verilog

EDA&#xff08;一&#xff09;Verilog Verilog是一种用于电子系统设计自动化&#xff08;EDA&#xff09;的硬件描述语言&#xff08;HDL&#xff09;&#xff0c;主要用于设计和模拟电子系统&#xff0c;特别是在集成电路&#xff08;IC&#xff09;和印刷电路板&#xff08;…

Apache RocketMQ知识点表格总结及示例

RocketMQ的使用大概还是四五年前的时候&#xff0c;最近几年参与的项目基本上都是使用的RabbitMQ,就我个人来说&#xff0c;我也更喜欢使用RabbitMQ&#xff0c;不过消息队列的功能都差不多&#xff0c;大同小异。原理也类似。我喜欢使用RabbitMQ&#xff0c;是因为RabbitMQ安装…

Linux / Ubuntu 备份数据

Linux / Ubuntu 备份数据 需要备份的文件tar 工具备份/打包过程恢复/解包过程 流程自动化start_backup.shserver_backup.sh 同步发布在个人笔记Linux / Ubuntu 备份数据 需要备份的文件 对于我们的 linux 服务器&#xff08;当然也适用于桌面端&#xff09;&#xff0c;时常进…

CogVLM/CogAgent环境搭建推理测试

引子 对于多模态大语言模型&#xff0c;一直没有怎么接触。刚巧一朋友有问到这方面的问题&#xff0c;也就顺手调研下。智谱AI的东西一直以来&#xff0c;还是很不错的。ChatGLM的忠实fans&#xff0c;看到白嫖网站github上有他们开源的多模态CogVLM/CogAgent&#xff0c;那就…

C语言:文件操作(中)

片头 嗨&#xff01;小伙伴们&#xff0c;大家好&#xff01;在上一篇中&#xff0c;我们学习了C语言&#xff1a;文件操作&#xff08;上&#xff09;&#xff0c;在这一篇中&#xff0c;我们将继续学习文件操作&#xff0c;准备好了吗&#xff1f;Ready Go ! ! ! 文件的顺序…

Linux下top命令指标说明

目录 Linux下top命令指标说明1. 概览2. CPU利用率3. 内存利用率4. 进程信息 Linux下top命令指标说明 在Linux系统中&#xff0c;top 命令是一个用于实时监视系统运行状态的工具。通过 top 命令&#xff0c;我们可以了解系统的负载情况、CPU利用率、内存使用情况以及各个进程的…

ubuntu修改/etc/resolve.conf总是被重置

ubuntu修改/etc/resolve.conf总是被重置 其实处理来很简单&#xff0c;根据英文提示删除/etc/resolve.conf,那是一个软链接&#xff0c;重新创建/etc/resolve.conf rm /etc/resolve.conf vi /etc/resolve.conf 添加nameserver 223.5.5.5

短视频素材去哪里搬运?短视频素材有哪些类型?

在这个数字化和视觉传达至关重要的时代&#xff0c;选择合适的视频素材对于提升视频内容的吸引力和观众参与度至关重要。无论您是一名广告制片人、社交媒体经理还是独立视频制作者&#xff0c;以下这些精选的视频素材网站将为您提供从高清视频到特效资源的全面支持&#xff0c;…

【Qt】Qt输出多页pdf

Qt输出多页 pdf 2. 代码 QFile pdfFile("./tmp.pdf");pdfFile.open(QIODevice::WriteOnly);QPdfWriter *pPdfWriter new QPdfWriter(&pdfFile);pPdfWriter->setResolution(300);pPdfWriter->setPageSize(QPageSize(QPageSize::A4));pPdfWriter->setPag…