力扣精选算法100题——等于目标值的两个数or三数之和(双指针专题)

目录

🚩等于目标值的俩个数

第一步:了解题意

第二步:算法原理

第三步:代码实现

🚩三数之和

 第一步:了解题意

第二步:算法原理

思路:

❗不漏:

❗去重:

!优化

第三步:代码实现


🚩等于目标值的俩个数

 本题链接——等于目标值的俩个数

第一步:了解题意

其实很好理解:我们在一个数组里面找到2个数等于target值即可,如果存在多种结果都等于target,只需要返回一组即可。

第二步:算法原理

就拿示例1来分析:

3和15符合题意,15和3也符合,只要返回一组即可。

我们怎么找到呢?遇到找到之和等于目标值一般都是用双指针来。

但是这个左右双指针并不是同向的,而是一个left定义在最初的位置,一个right定义在最右边的位置。如果left+right的值等于目标值,则就返回该值,如果小于目标值那么left++,如果大于目标值那么right--,,直到left==right相遇即可结束,但是这些的前提是有序数列(升序)。

好吧,这一个样例很凑巧,直接等于目标值。


算法原理:
    sort排序
    [left+right] === target  return {[left],[right]}
    [left+right] < target   left++
    [left+right] > target   right--

直到left==right相遇的时候就结束

这是我记录下来地一个笔记 :


第三步:代码实现

class Solution {
public:
    vector<int> twoSum(vector<int>& price, int target) 
    {
        int left=0,right=price.size()-1;
        int sum=0;
        while(left<right)
        {
            sum=price[left]+price[right];
            if(sum>target)right--;
            else if(sum<target) left++;
            else return {price[left],price[right]};
        }
        return {-1,-1};
    }
};

🚩三数之和

本题链接——三数之和

 第一步:了解题意

我们要找nums数组中三个数相等等于0即可,每个三元组都是不重复的,比如[-1,0,1]和[0,1,-1]是重复的,只能取一组。


第二步:算法原理

上一个题目是利用双指针给有序数组求解俩数之和,这题是求三数之和也一样可以用双指针,但是不同的是,三数,怎么用俩个指针来控制呢?

思路:

  • 1.先排序
  • 2.固定一个a
  • 3.在该数的后面区间内,利用“双指针”算法快速找到俩个数之和等于-a即可。

但是这一题并没有这么固定,我们需要处理2个小细节:

❗不漏:

就是如果找到了符合题意的,但是指针不能停,还得继续缩小区间,比如

❗去重:

大家可以理解去重其实也是一种优化,就是避开掉重复的运算。比如:

并且如果固定的a值,下一个固定的a值与原先的a值相等,也是可以跳过这次循环继续下下个固定a值。

!优化

我们首先都是要给有序数组排序的sort排成升序,那么固定的a值肯定是需要<=0的,不然如果a=0或者a>0,这个序列是升序,那么就代表着a后面的数据都是>0,那么肯定是不等相加等于0的。

所以只要满足a<=0即可。


第三步:代码实现

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) 
    {
        vector<vector<int>> ret;
        //排序
         sort(nums.begin(),nums.end());
         //利用双指针解决问题
        for(int i=0;i<nums.size()&&nums[i]<=0;i++)//固定a
        {
            if(i>0)//看看固定的a值是不是和原先的相等,相等就跳过下个一个值固定
            {
                 if(nums[i]==nums[i-1]) continue;
            }
            int left=i+1,right=nums.size()-1,a=nums[i];
            while(left<right)
            {
                if(nums[left]+nums[right]<-a)
                {
                    left++;
                    while(left<right&&nums[left]==nums[left-1])
                    {
                        left++;
                    }
                }
                else if(nums[left]+nums[right]>-a)
                {
                    right--;
                    while(left<right&&nums[right]==nums[right+1])
                    {
                        right--;
                    }
                }
                else
                {
                    ret.push_back({nums[i],nums[left],nums[right]});
                    left++;
                     while(left<right&&nums[left]==nums[left-1])
                    {
                        left++;
                    }
                    right--;
                    while(left<right&&nums[right]==nums[right+1])
                    {
                        right--;
                    }
                }
            }
        }
        return ret;
    }
};

 安静下来,慢慢地,一点一点地,与时间相遇。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2. goLand安装及外配置参数通用用法

目录 概述测试代码解决外配置参数结束 概述 选择版本安装 go 安装的版本 1.go安装及相关配置 goLand 对于 习惯 idea 系列使用的人&#xff0c;还是很友好的。 测试代码 package mainimport ("flag""fmt""os" )func main() {name : flag.St…

C++核心编程(包含:内存、函数、引用、类与对象、文件操作等)【持续更新】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 C核心编程&#x1f30f;1 内存分区模型&#x1f384;1.1 程序运行前&#x1f384;1.2 程序运行后&#x1f384;1.3 new操作符 &#x1f30f;2 引用&#x1f384;2.1 引用的基…

使用composer生成的DMG和PKG格式软件包有何区别

在使用Composer从包源构建软件包时候&#xff0c;有两种不同类型的包&#xff1a;PKG和DMG。你知道两者之间的区别吗? 以及如何选取吗&#xff1f; 每种格式都有各自的优势具体取决于软件包的预期用途以及用于部署软件包的工具。下面我们来了解一下PKG和DMG格式的区别和用途。…

C++I/O流——(4)格式化输入/输出(第一节)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 含泪播种的人一定能含笑收获&#xff…

如何快速看懂一篇英文AI论文?

已经2024年了&#xff0c;该出现一个写论文解读AI Agent了。 大家肯定也在经常刷论文吧。 但真正尝试过用GPT去刷论文、写论文解读的小伙伴&#xff0c;一定深有体验——费劲。其他agents也没有能搞定的&#xff0c;今天我发现了一个超级厉害的写论文解读的agent &#xff0c…

使用micro-app将现有项目改造成微前端,对现有项目实现增量升级

使用micro-app将现有项目改造成微前端&#xff0c;对现有项目实现增量升级 基座应用 1、安装依赖 npm i micro-zoe/micro-app --save2、在入口引入 //main.js import microApp from micro-zoe/micro-appnew Vue({ }) //在new Vue 下面执行 microApp.start()3、新增一个vue页…

harbor https

harbor https部署 准备docker-compose安装https 证书harbor安装访问harbor推镜像到harbor 准备 192.168.112.99&#xff0c;harbor&#xff0c;centos7 192.168.112.3&#xff0c;测试机&#xff0c;centos7 docker版本&#xff1a;docker-ce 20.10.16&#xff08;部署参考&a…

imgaug库指南(28):从入门到精通的【图像增强】之旅(万字长文)

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

在Excel中如何打开VBA,这里提供两种方法

想在Excel中创建或添加自己的自定义Visual Basic脚本吗&#xff1f;第一步是了解如何在Excel中打开VBA编辑器。 在易用性和整体功能方面&#xff0c;没有其他电子表格应用程序能与Excel相提并论。无论你想做什么&#xff0c;只要你能深入挖掘Excel的深层菜单&#xff0c;就有很…

PTA——7-31 三角形判断

7-31 三角形判断 (15分) 给定平面上任意三个点的坐标(x​1​​,y​1​​)、(x​2​​,y​2​​)、(x​3​​,y​3​​)&#xff0c;检验它们能否构成三角形。 输入格式: 输入在一行中顺序给出六个[−100,100]范围内的数字&#xff0c;即三个点的坐标x​1​​、y​1​​、x​2​…

深度学习笔记(八)——构建网络的常用辅助增强方法:数据增强扩充、断点续训、可视化和部署预测

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解&#xff0c;如有遗漏或错误&#xff0c;欢迎评论或私信指正。 截图和程序部分引用自北京大学机器学习公开课 要构建一个完善可用的神经网络&#xff0c;除了设计网络结构以外&#xff0c;还需要添加一些辅助代码来增强…

Flume 之自定义Sink

1、简介 前文我们介绍了 Flume 如何自定义 Source&#xff0c; 并进行案例演示&#xff0c;本文将接着前文&#xff0c;自定义Sink&#xff0c;在这篇文章中&#xff0c;将使用自定义 Source 和 自定义的 Sink 实现数据传输&#xff0c;让大家快速掌握Flume这门技术。 2、自定…

【PostgreSQL】安装和常用命令教程

PostgreSQL window安装教程 window安装PostgreSQL 建表语句&#xff1a; DROP TABLE IF EXISTS student; CREATE TABLE student (id serial NOT NULL,name varchar(100) NOT NULL,sex varchar(5) NOT NULL,PRIMARY KEY (id) );INSERT INTO student (id, name, sex) VALUES (…

【电力电子】2 开、闭环单相桥式SPWM逆变仿真电路

【仅供参考】 【2022.11西南交大电力电子仿真】 目录 1 开环单相桥式SPWM逆变电路搭建及波形记录 2 闭环单相桥式SPWM逆变电路搭建及波形记录 1 开环单相桥式SPWM逆变电路搭建及波形记录 采用单极性调制法&#xff0c;按老师PPT&#xff08;如下图&#xff09;所示进行单相…

图解基础排序算法(冒泡、插入、选择)(山东大学实验二)

目录 ⚽前言&#xff1a; &#x1f3d0; 冒泡排序&#xff1a; 设定&#xff1a; 分类&#xff1a; 起源&#xff1a; 图解冒泡&#xff1a; 图中绿色&#xff1a; 图中橙色&#xff1a; 整体思路&#xff1a; 交换思路&#xff1a; 核心代码&#xff1a; &#x…

基于WebSocket双向通信技术实现-下单提醒和催单(后端)

学习复盘和总结项目亮点。 扩展&#xff1a;该功能能应用在&#xff0c;各种服务类项目中。&#xff08;例如&#xff1a;酒店、洗脚城等系ERP系中提醒类服务&#xff09; 4. 来单提醒 4.1 需求分析和设计 用户下单并且支付成功后&#xff0c;需要第一时间通知外卖商家。通…

服务网关 Gateway

服务网关 Gateway Spring Cloud Gateway 是 Spring Cloud 生态系统中的网关&#xff0c;它基于 Spring5.0 SpringBoot2.0 WebFlux&#xff08;基于高性能的 Reactor 模式响应式通信框架 Netty&#xff0c;异步非阻塞模型&#xff09;等技术开发。旨在为微服务架构提供一种简…

如何在CentOS 7 中搭建Python 3.0 环境

1、下载 通过https://www.python.org/ftp/python/下载Python安装包&#xff0c;这里下载Python-3.10.9.tgz&#xff1b; 2、上传 借助MobaXterm等工具将Python安装包上传至/opt目录&#xff1b; 3、解压 将JDK压缩文件解压至/opt目录&#xff1a;tar -xvf /opt/Python-3.1…

React Store及store持久化的使用

1.安装 npm insatll react-redux npm install reduxjs/toolkit npm install redux-persist2. 使用React Toolkit创建counterStore并配置持久化 store/modules/counterStore.ts&#xff1a; import { createSlice } from reduxjs/toolkit// 定义状态类型 interface Action {…

Python数据分析案例33——新闻文本主题多分类(Transformer, 组合模型) 模型保存

案例背景 对于海量的新闻&#xff0c;我们可能需要进行文本的分类。模型构建很重要&#xff0c;现在对于自然语言处理基本都是神经网络的方法了。 本次这里正好有一组质量特别高的新闻数据&#xff0c;涉及 教育 科技 社会 时政 财经 房产 家居 七大主题&#xff0c;基本涵盖…