三数之和--力扣15

devtools/2025/1/15 12:26:25/

这里写目录标题

  • 题目
  • 思路
  • 代码

题目

在这里插入图片描述

思路

题目要求三元组不能重复,如果使用哈希表来做,去重很复杂,而且需要额外的空间,我们这里使用双指针法直接针对数组操作。注意题目要求返回的是二维数组!
最重要的是,我们要对数组进行排序,排序后若数组中,第一个元素大于零,则后续不可能存在和等于零的三元组。
其次是对abc去重:
对a去重:当i大于0并且nums[i] == nums[i - 1]时,说明a重复了,直接结束本次循环。i等于0时,是第一次,所以不用去重。为什么i要大于0因为要保证i - 1大于等于0。为什么不是nums[i] == nums[i -+1]?因为nums[i -+1]是left。
对b和c去重:在保证循环体条件right > left情况下,类似于a,判断b的后一个和c的前一个是否有重复的,如果有,b++或者c–。

代码

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {//返回二维数组 要求a+b+c=0vector<vector<int>> res;//排序sort(nums.begin(), nums.end());for (int i = 0; i < nums.size(); i++) {//如果排序后数组的第一个值大于零,直接返回if (nums[i] > 0) {return res;}//对a去重if (i > 0 && nums[i] == nums[i - 1]) {continue;}//双指针法,寻找b和cint left = i + 1;int right = nums.size() - 1;while (right > left) {if (nums[i] + nums[left] + nums[right] > 0) {right--;} else if (nums[i] + nums[left] + nums[right] < 0) {left++;} else {res.push_back(vector<int>{nums[i], nums[left], nums[right]});//对b和c去重while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;//双指针收缩,继续循环 right--;left++;}}}return res;}
};

http://www.ppmy.cn/devtools/112577.html

相关文章

Redis——通用命令

目录 Redis通用命令Redis中最核心的两个命令getset Redis全局命令keys语法注意事项 existsdel(delete)expirettlredis的key的过期策略是怎么实现的&#xff1f;了解拓展 type总结 Redis通用命令 Redis的命令非常非常多&#xff0c;所以 1. 掌握常用命令&#xff08;多操作练习…

Kafka+PostgreSql,构建一个总线服务

之前开发的系统&#xff0c;用到了RabbitMQ和SQL Server作为总线服务的传输层和存储层&#xff0c;最近一直在看Kafka和PostgreSql相关的知识&#xff0c;想着是不是可以把服务总线的技术栈切换到这个上面。今天花了点时间试了试&#xff0c;过程还是比较顺利的&#xff0c;后续…

如何注册Liberty大学并获取Perplexity Pro

俗称白嫖 Perplexity Pro 会员 如何注册Liberty大学并获取Perplexity Pro 1. 访问官网 首先&#xff0c;进入Liberty大学官网 https://www.liberty.edu&#xff0c;点击“Apply”按钮。 2. 选择课程 选择“Online”课程&#xff0c;选择“Certificate”&#xff0c;然后随便…

国产视频转换HDMI1.4转单/双MIPI DSI/CSI LT6911C芯片方案,带音频输出,QFN64封装 Lontium

LT6911C:HDMI 1.4 TO MIPI DSI/CSI 芯片简介&#xff1a; LT6911C是一款高性能的HDMI1.4转换器MIPI DSI/CSI芯片用于VR/智能手机/显示应用。对于MIPI DSI/CSI输出&#xff0c;LT6911C功能可配置单端口或双端口MIPIDSI/CSI 1高速时钟通道和1~4个高速数据通道最大1.5Gb/s/lane&am…

滑动窗口(1)_长度最小的子数组

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(1)_长度最小的子数组 收录于专栏【经典算法练习】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. …

Nature Communications 可远程操控食欲的口服软体机器人

肥胖对人群的的影响是深远的&#xff0c;它不仅关系到个人的健康&#xff0c;还与全球公共卫生挑战密切相关。据世界卫生组织的数据&#xff0c;全球每8人中就有1人患有肥胖症。肥胖增加了患2型糖尿病、心血管疾病、某些癌症等多种健康问题的风险&#xff0c;并对社会经济产生重…

SpringBoot2:web开发常用功能实现及原理解析-整合EasyExcel实现Excel导入导出功能

1、工程包结构 主要是这5个Java类 2、导入EasyExcel包 这里同时贴出其他相关springboot的基础包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><depend…

3290. 最高乘法得分

Powered by:NEFU AB-IN Link 文章目录 3290. 最高乘法得分题意思路代码 3290. 最高乘法得分 题意 给你一个大小为 4 的整数数组 a 和一个大小 至少为 4 的整数数组 b。 你需要从数组 b 中选择四个下标 i0, i1, i2, 和 i3&#xff0c;并满足 i0 < i1 < i2 < i3。你…