【优选算法】三数之和(双指针算法)

devtools/2025/1/19 0:08:52/

 必须有为成功付出代价的决心,然后想办法付出这个代价。

目录 

一、【题目:15. 三数之和 - 力扣(LeetCode)】

二、【代码原理】

三、【代码】


一、【题目:15. 三数之和 - 力扣(LeetCode)】

需要注意的是,答案中不可以包含重复的三元组,也就是说,满足要求的组与组之间的三个数要不相同,每组要不重复。

二、【代码原理】

解法一:排序+暴力枚举+利用set去重

排序之后用三个for循环枚举出所有的情况一一排查,将满足条件的组都放到set里面去重,再将不同的组返回即可。

解法二:排序+双指针算法

  1. 将数组排序
  2. 先固定一个数 a(从头开始选定)
  3. 在这个数后面的区间内,使用「双指针算法」快速找到两个数之和等于 -a 即可。

同时需要注意的是【去重】操作,这个去重操作,是直接避免结果里有重复的数据

  1. 当处理完一个结果时,left 和 right 指针要跳过两边重复的元素。这样直接避免掉重复的数据。
  2. 当 i+1 == i 时,跳过重复的 i,直到遇到不同的 i。

三、【代码】

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums){vector<vector<int>> ret;//1.排序sort(nums.begin(), nums.end());//2.利用双指针解决问题int n = nums.size();for (int i = 0; i < n; ){if (nums[i] > 0) break;int left = i + 1, right = n - 1, target = -nums[i];while (left < right){int sum = nums[left] + nums[right];if (sum < target) left++;else if (sum > target) right--;else{ret.push_back({ nums[i], nums[left], nums[right] });left++, right--;//去重 left 和 right,用left<right防止越界while (left < right && nums[left] == nums[left - 1])left++;while (left < right && nums[right] == nums[right + 1])right--;}}i++;//去重i,用i<n 来防止越界while (i < n && nums[i] == nums[i - 1]) i++;}return ret;}
};

代码一定要思考透彻,多回顾,不要怕动脑,多思考几遍就没有想象中的那么复杂了,

明天继续。。。


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

相关文章

LLM实现视频切片合成 前沿知识调研

1.相关产品 产品链接腾讯智影https://zenvideo.qq.com/可灵https://klingai.kuaishou.com/即梦https://jimeng.jianying.com/ai-tool/home/Runwayhttps://aitools.dedao.cn/ai/runwayml-com/Descripthttps://www.descript.com/?utm_sourceai-bot.cn/Opus Cliphttps://www.opu…

VSCode 的部署

一、VSCode部署 (1)、简介 vsCode 全称 Visual Studio Code&#xff0c;是微软出的一款轻量级代码编辑器&#xff0c;免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、版本管理GIT等特性&…

C# 声明废弃特性

C# 声明废弃 使用特性[Obsolete] 可以在类&#xff0c;或者方法上方使用 类 如果调用该类&#xff0c;将显示 方法 基本用法 如果使用&#xff0c;将显示 高级用法 public ObsoleteAttribute(string message, bool error); //string message 提示可以拿什么来替换该语句 …

C#Halcon视觉流程框架个人封装流程心得

一&#xff0c;实现效果 1&#xff0c;初始界面 2&#xff0c;加载流程 3&#xff0c;点击流程列表“加载2D图像" 4&#xff0c;设置图像预处理参数与画线找线 5&#xff0c;执行流程 6&#xff0c;折叠工具箱 7&#xff0c;折叠操作区域 二&#xff0c;实现流程 1&…

【17】Word:林楚楠-供应链❗

目录 题目 NO1.2 NO3 NO4 NO5 NO6 NO7 NO89 题目 NO1.2 另存为&#xff1a;文件→另存为→文档→文件名/考生文件夹F12/FnF12→文件名/考生文件夹 插入→分节符→文本框→输入文件→排版_居中对齐→间距/回车去掉文本框的边框→选中文本框→格式&#xff1a;形状轮廓…

北京市房屋建筑物轮廓shp数据arcgis高度字段内容下载分析

标题中的“北京市房屋建筑物轮廓shp数据arcgis高度字段”涉及到的是地理信息系统&#xff08;GIS&#xff09;中的数据格式和属性字段。在GIS领域&#xff0c;SHP&#xff08;Shapefile&#xff09;是一种常见的矢量数据格式&#xff0c;用于存储地理空间特征&#xff0c;如点、…

docker与部署微服务实战

2013年发布至今&#xff0c; Docker 一直广受瞩目&#xff0c;被认为可能会改变软件行业。 但是&#xff0c;许多人并不清楚 Docker 到底是什么&#xff0c;要解决什么问题&#xff0c;好处又在哪里&#xff1f;今天就来详细解释&#xff0c;帮助大家理解它&#xff0c;还带有…

慧集通(DataLinkX)iPaaS集成平台-业务建模之域

通过左侧导航菜单〖业务建模〗→〖域〗&#xff0c;进入该界面&#xff1b;在该界面可以查看到系统中已存在的域列表。 新建域 在慧集通平台中进入【业务建模】的【域】页面&#xff0c;点击【新建】按钮进入新建页面&#xff1b;输入编码&#xff0c;名称、模块以及对应数据类…