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

news2024/11/17 7:17:46

目录

🚩等于目标值的俩个数

第一步:了解题意

第二步:算法原理

第三步:代码实现

🚩三数之和

 第一步:了解题意

第二步:算法原理

思路:

❗不漏:

❗去重:

!优化

第三步:代码实现


🚩等于目标值的俩个数

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

第一步:了解题意

其实很好理解:我们在一个数组里面找到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.coloradmin.cn/o/1390559.html

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

相关文章

Midjourney Prompt基本结构

在 Midjourney 的官方介绍文档里&#xff0c;介绍了最简单的 Prompt 结构是这样的&#xff1a; 但我觉得上面那个 Prompt 过于简单了 &#x1f602; &#xff0c;反而 Advanced Prompt 更适合学习&#xff1a; Image Prompts&#xff08;选填&#xff09; Prompt 分成三个部分…

Spring Boot框架中Controller层API接口如何支持使用多个@RequestBody注解接受请求体参数

一、前言 众所周知&#xff0c;在Spring Boot框架中&#xff0c;Controller层API接口编码获取请求体参数时&#xff0c;在参数上会使用RequestBody注解&#xff1b;如果一次请求中&#xff0c;请求体参数携带的内容需要用多个参数接收时&#xff0c;能不能多次使用RequestBody…

游戏开发丨基于PyGlet的简易版Minecraft我的世界游戏

文章目录 写在前面我的世界PyGlet简介实验内容游戏按键程序设计引入文件 运行结果写在后面 写在前面 本期内容&#xff1a;基于PyGlet的简易版Minecraft我的世界游戏 实验环境&#xff1a; pycharmpyglet 项目下载地址&#xff1a;https://download.csdn.net/download/m0_6…

【CFP-专栏3】多领域SCI/EI快刊,1个月录用,12天见刊,1个月检索!

一、材料科学类SCI 【期刊概况】IF:3.0-4.0, JCR3区&#xff0c;中科院4区&#xff1b; 【大类学科】材料科学&#xff1b; 【检索情况】SCI在检&#xff1b; 【录用周期】2-3个月左右录用&#xff1b; 【接收领域】低温环境下新型生物降解材料的开发相关研究均可&#xf…

构建未来教育:在线培训系统开发的技术探讨

随着远程学习的崛起和数字化教育的普及&#xff0c;在线培训系统的开发成为了现代教育的核心。本文将深入讨论在线培训系统的关键技术要点&#xff0c;涵盖前后端开发、数据库管理、以及安全性和身份验证等关键方面。 前端开发&#xff1a;提供交互性与用户友好体验 在构建在…

力扣算法之滑动窗口题目--水果成篮

文章目录 题目解析不同之处解决办法解决图示 代码 题目解析 首先我们先看一下题目如下图所示 题目意思也比较容易理解其实就是你有一个篮子这个篮子只能装两个不同种类的水果&#xff0c;问你最多能装多少个水果&#xff0c;这里还贴心的弄了一个样列&#xff0c;121 可以看出…

C盘满了,我用什么思路清理?

20240115 上周六同事传了一个很大的虚拟机给我&#xff0c;C盘就红了 虽然是飞秋选错了存储文件的路径&#xff0c;但后来忘了&#xff0c;就开始毫无目的删除文件&#xff0c;过程中会有没有权限删除的&#xff0c;这样还是没有改善。 咨询了公司IT技术人员&#xff0c; 告…

如何100%防止网站数据被采集?七种方法保证数据安全

当今互联网时代&#xff0c;数据采集是常见的行为&#xff0c;但也常常引起一些法律纠纷或者商业竞争。因此&#xff0c;一些网站或者公司需要采取措施来防止自己的数据被别人采集。以下是一些防止数据采集的措施&#xff1a; 防止代理IP模拟搜索引擎抓爬&#xff1a;使用代理I…

Centos7.9忘记Root密码找回

Centos7.9忘记Root密码找回 1. 背景2. 目的3. 具体操作3.1 重启系统3.2 增加代码3.3 单用户模式3.4 单用户模式3.5 修改密码3.6 创建文件3.7 重启验证 1. 背景 由于物理主机上安装了多个虚拟机&#xff0c;部分虚拟机忘记了root密码&#xff0c;前段时间刚好要用这个虚拟机&…

文件操作一(非常重要)

文件操作一&#xff08;非常重要&#xff09; 一、为什么使用文件&#xff1f;二、什么是文件&#xff1f;三、文件名(简单理解)四、二进制文件和文本文件&#xff08;重要&#xff09;五、流的概念&#xff08;非常重要&#xff09;六、文件的打开和关闭七、文件的顺序读写函数…

【Java 设计模式】创建型之工厂方法模式

文章目录 1. 定义2. 应用场景3. 代码实现4. 应用示例结语 在软件开发中&#xff0c;工厂方法模式是一种常见的创建型设计模式&#xff0c;它提供了一种将对象的实例化延迟到子类的方法。工厂方法模式通过定义一个创建对象的接口&#xff0c;但是让子类决定实例化哪个类。在本文…

【数据结构 | 直接选择排序】

直接选择排序 基本思路直接插入排序SelectSort 基本思路 直接插入排序&#xff08;StraightInsertionSort&#xff09;的基本操作是将一个记录插入到已经排好序的有序表中&#xff0c;从而得到一个新的、记录数增1的有序表。 我们可以同时从数组的头部和尾部同时进行排序工作…

集成xxljob项目如何迁移到K8S

前言 大家好&#xff0c;今天我们将基于XXL-Job&#xff0c;探讨任务调度迁移到云端的相关话题。 XXL-Job是一款功能强大、易用可靠的国产分布式任务调度平台&#xff0c;是目前国内使用比较广泛的分布式任务调度平台之一。它的主要特点包括&#xff1a; 支持分布式、多线程…

29 旋转工具箱

效果演示 实现了一个菜单按钮的动画效果&#xff0c;当鼠标悬停在菜单按钮上时&#xff0c;菜单按钮会旋转315度&#xff0c;菜单按钮旋转的同时&#xff0c;菜单按钮旋转的8个小圆圈也会依次旋转360度&#xff0c;并且每个小圆圈的旋转方向和菜单按钮的旋转方向相反&#xff0…

查看服务器的yum 源

1、cd /etc/yum.repos.d 2、编辑 CentOS-Stream-Sources.repo 3、 查看里面的yum源地址 4、更新yum源&#xff0c;执行下面指令 yum clean all # 清除系统所有的yum缓存 yum makeacache # 生成新的yum缓存 yum repolist

Spring Boot - Application Events 同步 VS 异步 发布订阅事件实战

文章目录 PreCode基础工程启动类切入口事件 发布事件同步 Listener异步Listener增加EnableAsync增加 Async 测试 Pre Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEv…

低代码自动化测试的实践

何为低代码测试 传统上&#xff0c;功能、 UI、端到端等测试自动化的实现都涉及编写测试脚本&#xff0c;代替测试人员执行重复的手动测试任务。自动化脚本的开发工作通常由 QA 工程师或开发人员完成&#xff0c;这需要编写大量代码。 而低代码甚至无代码的理念也是在自动化测…

SpringBoot+SSM项目实战 苍穹外卖(12) Apache POI

继续上一节的内容&#xff0c;本节是苍穹外卖后端开发的最后一节&#xff0c;本节学习Apache POI&#xff0c;完成工作台、数据导出功能。 目录 工作台Apache POI入门案例 导出运营数据Excel报表 工作台 工作台是系统运营的数据看板&#xff0c;并提供快捷操作入口&#xff0c…

SQLServer 为角色开视图SELECT权限,报错提示需要开基础表权限

问题&#xff1a; 创建了个视图V&#xff0c;里面包含V库的a表&#xff0c;和T库的b表 为角色开启视图V的SELECT权限&#xff0c;提示T库的b表无SELECT权限&#xff0c;报错如下 解决方案&#xff1a; ①在T库建个视图TV&#xff0c;里面包含b表&#xff08;注意是在b表的对…

《2023年度程序员收入报告》 :旧金山位居第一,北京程序员中位数超60万元

2024年刚刚拉开序幕&#xff0c;备受瞩目的程序员薪资调研报告再度登场。由知名数据采集平台levels.fyi 搜集并整理了《2023年全球程序员收入报告》&#xff0c;为我们揭示了程序员最新的收入情况&#xff0c;其中有哪些值得关注的亮点呢&#xff1f; 行情向好&#xff0c;大多…