力扣hot100——三数之和(双指针)

题目:三数之和
排序 + 双指针
本题的难点在于如何去除重复解。
算法流程:
1、特判,对于数组长度 n,如果数组为 null 或者数组长度小于 3,返回 []2、对数组进行排序。
3、遍历排序后数组:
(1)若 nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于 0,直接返回结果。
(2)对于重复元素:跳过,避免出现重复解
(3)令左指针 L=i+1,右指针 R=n−1,当 L<R 时,执行循环:
当 nums[i]+nums[L]+nums[R]==0,执行循环,判断左界和右界是否和下一位置重复,去除重复解。并同时将 L,R 移到下一位置,寻找新的解
若和大于 0,说明 nums[R] 太大,R 左移
若和小于 0,说明 nums[L] 太小,L 右移作者:吴彦祖
链接:https://leetcode.cn/problems/3sum/solutions/39722/pai-xu-shuang-zhi-zhen-zhu-xing-jie-shi-python3-by/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码实现:
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {//特判,对于数组长度 n,如果数组为 null 或者数组长度小于 3,返回空数组if(nums.size()<3){return vector<vector<int>>();}int l,r;vector<vector<int>> result; //对数组进行排序。sort(nums.begin(), nums.end());for (int i = 0; i< nums.size(); i++){l=i+1;r = nums.size()-1;//若 nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于 0,直接返回结果。if (nums[i]>0){return result;}//难点:对于重复元素:跳过,避免出现重复解if (i>0 && nums[i] == nums[i-1]){continue;}while(r>l){if ((nums[i]+nums[l]+nums[r]) > 0){r--;}else if((nums[i]+nums[l]+nums[r]) < 0){l++;}else{vector<int> group;group.push_back(nums[i]);group.push_back(nums[l]);group.push_back(nums[r]);result.push_back(group);//去重第三个元素while(r>l && nums[r]==nums[r-1])r--;//去重第二个元素while(r>l && nums[l]==nums[l+1])l++;   r--;l++;}}   }return result;}
};

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

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

相关文章

操作系统为ubantu的服务器上部署nginx软件基础步骤总结

今天在这里&#xff0c;我们总结一下ubantu的服务器上部署nginx软件&#xff0c;请按照以下步骤进行安装&#xff1a; 1、更新包列表&#xff1a; 首先更新你系统中的可用软件包列表&#xff0c;以确保你可以安装最新版本。 sudo apt update2、 Ubuntu上更新已安装软件包&…

记录一次,rabbitmq开启stomp插件之后,还是连不上15674端口的问题

原因是装在docker 里面的rabbitmq 没有映射15674端口&#xff0c;需重新删除容器之后重新运行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本号 进入docker容器开启插件 docker exec -it rabbitm…

MATLAB 控制系统设计与仿真 - 27

状态空间的标准型 传递函数和状态空间可以相互转换&#xff0c;接下来会举例如何有传递函数转成状态空间标准型。 对角标准型 当 G(s)可以写成&#xff1a; 即&#xff1a; 根据上图可知&#xff1a; 约当标准型 当 G(s)可以写成&#xff1a; 即&#xff1a; 根据上图…

1.FastAPI简介与安装

文章目录 为什么选择FastAPI&#xff1f;FastAPI支持的功能FastAPI的安装第一个FastAPI应用运行应用 为什么选择FastAPI&#xff1f; python web开发: Django: 适合大型复杂项目&#xff1b;Flask&#xff1a;适合灵活开发&#xff0c;搭建小型项目&#xff1b;FastAPI: 兼具开…

【MyDB】一个仿照MySQL的轮子项目系列文章汇总

迄今所有系列文章内容如下&#xff1a; 代码位于xianghua-2/MYDB: 一个仿MySQL的简易数据库 1 项目环境配置以及整体项目结构 【MyDB】1-MyDB环境配置及项目结构-CSDN博客 2 TransactionManager事务管理模块 【MyDB】2-TransactionManager 事务管理-CSDN博客 3 DataManage…

2025年汽车加气站操作工考试精选题库

汽车加气站操作工题库中题目及答案&#xff1a; 单项选择题 1、按压力容器的设计压力分为&#xff08; &#xff09;个压力等级。 A. 3 B. 4 C. 5 答案&#xff1a;B 2、缓冲罐的安装位置在天然气压缩机&#xff08; &#xff09;。 A. 前 B. 后 C. 中间 答案&#…

【Unity Bug 随记】使用Rider debug功能时Unity Reload Domain卡死问题

使用Rider debug功能时Unity Reload Domain卡死 检查是否使用unity version control版本控制系统&#xff08;VCS&#xff09;&#xff0c;使用的话删除这个包&#xff0c;再尝试&#xff0c;如果能正常断点调试&#xff0c;说明确实是VCS的问题。 我和几个网友都是这个原因…

麒麟银河V10服务器RabbitMQ安装

安装步骤 rabbitMQ依赖于erlang的环境&#xff0c;所以需要先安装erlang&#xff0c;erlang跟rabbitMQ是有版本之间的关联关系的&#xff0c;根据对应的版本去安装下载&#xff0c;保证少出问题。 可以通过官网来查看RabbitMQ和erlang之间的版本对应关系 rabbitMQ和erlang之间…

springboot操作redis集群,注意事项

整合redis可查看博文 springboot 整合redis_springboot整合redis csdn-CSDN博客 集群中操作注意事项 1 多键操作失败&#xff1a; 当使用multiGet等需要同时访问多个键的方法时&#xff0c;如果没有使用Hash Tags&#xff0c;这些键可能会被分配到不同的槽中。如果这些槽位于…

优选算法训练篇07--力扣LCR179.查找总价格为目标值的两个商品

目录 1.题目链接&#xff1a;LCR179.查找总价格为目标值的两个商品 2.题目描述&#xff1a; 3.解法一(暴力解法&#xff0c;会超时)&#xff1a; 4.解法二(双指针-对撞指针): 1.题目链接&#xff1a;LCR179.查找总价格为目标值的两个商品 2.题目描述&#xff1a; 购物车…

KMP-子串匹配算法-关键点理解

1.理解next[]数组的使用与来历 2.求解next[]数组 一、kmp算法的原理 首先观察暴力解法&#xff1a;假设主串为&#xff1a;abdxxabc&#xff0c;模式串为abxxabd。 暴力解法&#xff0c;就是对主串每个字符作为第一个字符&#xff0c;开始和模式串比较。 比如&#xff1a;从…

Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装

Flutter 学习之旅 之 flutter 使用 SQLite&#xff08;sqflite&#xff09; 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装 目录 Flutter 学习之旅 之 flutter 使用 SQLite&#xff08;sqflite&#xff09; 实现简单的数据本地化 保存/获取/移除/判断是否存在…

群体智能优化算法-粒子群优化算法(Particle Swarm Optimization, PSO,含Matlab源代码)

摘要&#xff08;Abstract&#xff09; 粒子群优化&#xff08;PSO&#xff09;是一种基于群体智能的优化算法&#xff0c;受鸟群觅食行为的启发。PSO 通过模拟粒子&#xff08;个体&#xff09;在搜索空间中的运动来寻找最优解。每个粒子根据自身的历史最优位置&#xff08;p…

Redis 在windows下的下载安装与配置

参考链接:https://developer.aliyun.com/article/1395346 下载 Redis 访问 Redis 下载地址&#xff1a;https://github.com/tporadowski/redis/releases 下载 Redis 时&#xff0c;你可以选择 ZIP 包或 MSI 安装&#xff1a; ZIP包&#xff1a;需要手动解压、初始化、配置和…

UE5材质法线强度控制节点FlattenNormal

连法 FlattenNormal内部是这样的 FlattenNormal的作用是用来调整法线强度 连上FlattenNormal后 拉高数值

在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索

作者&#xff1a;来自 Elastic Chris Hegarty 及 Hemant Malik 由 NVIDIA cuVS 提供支持&#xff0c;此次合作旨在为开发者在 Elasticsearch 中的向量搜索提供 GPU 加速。 在 Elastic Engineering 组织内&#xff0c;我们一直致力于优化向量数据库的性能。我们的使命是让 Lucen…

Android 13深度定制:SystemUI状态栏时间居中显示终极实战指南

一、架构设计与技术解析 1. SystemUI状态栏核心布局机制 层级结构 mermaid 复制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…

ArcGIS10.X影像智能下载!迁移ArcGIS Pro批量智能高清影像下载工具至ArcGIS!

上周我们分享了 我写的一个ArcGIS Pro版批量下载高清影像&#xff08;谷歌、天地图、ESRI等&#xff09;工具给大家&#xff0c;Deepseek我&#xff01;写一个ArcGIS Pro批量下载高清影像&#xff08;谷歌、天地图、ESRI等&#xff09;工具给大家-CSDN博客文章浏览阅读130次。深…

前端面经分享(25/03/19)

北京一家做协同办公软件出海的公司&#xff0c;技术一面&#xff0c;20k-40k&#xff0c;要求3-5年 详细聊了一下上家公司的项目上家公司的项目是不做了吗&#xff0c;离职原因是什么&#xff0c;你觉得公司的这个产品怎么样在做AI类的业务时&#xff0c;作为前端感觉跟常规业务…

7 款可视化爬虫工具全解析:案例示范与操作指南

目录 1. ParseHub 2.WebHarvy 3.DataMiner 4.Dexi.io 5.ContentGrabber 6.Portia 7.UiPath 文档聚焦 7 款热门可视化爬虫工具&#xff0c;突出简便的可视化操作&#xff0c;简单拖拽、设置&#xff0c;无需编程知识&#xff0c;人人皆可上手。 1. ParseHub ParseHub 是一…