当前位置: 首页 > news >正文

【LeetCode】双指针求解和为s的两个数字

在这里插入图片描述

Problem: 剑指 Offer 57. 和为s的两个数字

文章目录

  • 题目解析
  • 算法思路分析
  • 复杂度
  • Code

题目解析

首先来讲解一下本题的思路

  • 我们看到本题的意思很简单,就是去这个nums这个数组中进行寻找,如果找到了两个数相加之和为target的话,那构成一个结果集并返回

1.jpg

算法思路分析

接下去我们来分析一下本题的思路

  1. 暴力解法
  • 首先第一种,我们都会想到的就是【暴力求解】,那就是使用两层for循环,去一一地做匹配工作,不过这种解法我们可想而知,一定会超时,所以这里不做过多的叙述
for(int i = 0;i < nums.size(); ++i)for(int j = i + 1;j < nums.size(); ++j)

2.jpg

  1. 利用单调性,使用双指针算法进行求解
  • 我们的话主要还是利用双指针的这种解法去解决本题,一个left指针指向最左端,一个right指针指向最右端,通过前后遍历去寻找哪两个数可以构成结果为【target】

3.jpg

  • 这里会出现三种情况,首先是第一种,若是我们碰到了nums[left] + nums[right] < target,那此时我们就可以去做一个取巧的工作
  • 读者可以再去仔细地阅读一下本题的题目意思,便可以知道这个数组序列是呈现递增排列的,那么既然【2】和最大的【21】都比target要来得小了,和【21】前面的这个几个数就要来得更小了,此时我们无需再去多次一举进行比较。此时只需执行left++

4.jpg

  • 接下去我们再来考虑一下这个nums[left] + nums[right] > target的情况,那我们知道这种情况也是不符合的,但是呢再去进行判断的时候我们还可以做进一步的简化
  • 读者可以先行思考一下,此时我们应该排除掉哪个数字呢?那很明显就是这个【21】,为什么呢?想一下这个【21】和最小的【11】都会超过target了,那么其余的【15】和【19】岂不是更加会超过了?
  • 所以呢这个【21】我们应该将其舍去才对,对应到代码即为right--

5.jpg

  • 那最后这一种的话就是找到了的情况,此时我们只需返回这两个数据的结果集的即可

6.jpg

复杂度

  • 时间复杂度:

考虑到最坏的情况,即为我们在遍历寻找的时候两个左右指针相遇了,即为没找到,那也就是把这个序列遍历了一遍,其时间复杂度 O ( n ) O(n) O(n)

  • 空间复杂度:

没有开辟任何额外的空间,所以空间复杂度为 O ( 1 ) O(1) O(1)

Code

以下是代码展示

  • 这里的话讲一下和这个{nums[left], nums[right]},可能有的小伙伴不是很清楚,此属于 C++初始化列表 的相关知识
  • 一般我们在LeetCode中返回两个数的集合时无需再去创建新的vector集合,而是会通过隐式类型转换构成一个vector集合进行返回
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;int sum = 0;while(left < right){sum = 0;sum = nums[left] + nums[right];if(sum < target){left++;}else if(sum > target){right--;}else{return {nums[left], nums[right]};}}return {-1, -1};}
};

在这里插入图片描述

相关文章:

【LeetCode】双指针求解和为s的两个数字

Problem: 剑指 Offer 57. 和为s的两个数字 文章目录 题目解析算法思路分析复杂度Code 题目解析 首先来讲解一下本题的思路 我们看到本题的意思很简单&#xff0c;就是去这个nums这个数组中进行寻找&#xff0c;如果找到了两个数相加之和为target的话&#xff0c;那构成一个结果…...

opencv识别一张图片的多个红框,并截取红框的内容

需求 需要获取图片的红框的内容&#xff0c;实体的图片我就不放了 获取红框 先截取获得图片的多个轮廓 import cv2 import numpy as np # 加载图像并转换为灰度图像 image cv2.imread(image6.jpg) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用高斯模糊以减…...

数据库-事务

介绍&#xff1a; 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事物会把所有的操作作为一个整体一起向系统 提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败 操作&#xff1a;事务控制 开启事务&#xff1a;start…...

MySQL 使用开源审计插件

文章目录 前言1. 审计插件下载2. 审计插件参数2.1 server_audit_events2.2 server_audit_excl_users2.3 server_audit_output_type2.4 server_audit_file_path2.5 server_audit_file_rotate_now2.6 server_audit_file_rotate_size2.7 server_audit_file_rotations2.8 server_au…...

Python入门教程 | Python3 集合(Set)

Python3 集合&#xff08;Set&#xff09; 集合&#xff08;set&#xff09;是一个无序的不重复元素序列。 集合中的元素不会重复&#xff0c;并且可以进行交集、并集、差集等常见的集合操作。 可以使用大括号 { } 创建集合&#xff0c;元素之间用逗号 , 分隔&#xff0c; 或…...

视频汇聚/视频云存储/视频监控管理平台EasyCVR安全检查的相关问题及解决方法2.0

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…...

【C++模拟实现】反向迭代器的实现

【C模拟实现】反向迭代器的实现 目录 【C模拟实现】反向迭代器的实现反向迭代器的代码示例反向迭代器的模拟实现要点引入iterator模版参数rbegin()和rend()的实现 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2023.9.5 前言&#xff1a;本篇博客主要介绍反向迭代器的实现&…...

Kubernetes技术--k8s核心技术持久化存储

有时候需要在集群中进行一些重要的数据进行持久化存储,然后需要的时候再进行挂载,那么下面我们一起来看看如何实现数据的持久化存储操作。 1.nfs网络存储 -1.找一台服务器做nfs的服务端,安装nfs。(这里我们直接在master上实现)。 这里应该找再单独的搭建一个node节点做持…...

【80天学习完《深入理解计算机系统》】第十四天 复习第三章

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…...

库中是如何实现string类的?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…...

无涯教程-JavaScript - WORKDAY.INTL函数

描述 WORKDAY.INTL函数返回带有自定义周末参数的指定工作日数之前或之后的日期的序列号。周末参数指示哪些和多少天是周末。周末和指定为假期的任何日子均不视为工作日。 语法 WORKDAY.INTL (start_date, days, [weekend], [holidays])争论 Argument描述Required/OptionalS…...

STM32--蓝牙

本文主要介绍基于STM32F103C8T6和蓝牙模块实现的交互控制 简介 蓝牙&#xff08;Bluetooth&#xff09;是一种用于无线通信的技术标准&#xff0c;允许设备在短距离内进行数据交换和通信。它是由爱立信&#xff08;Ericsson&#xff09;公司在1994年推出的&#xff0c;以取代…...

java 实现原型模式

原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许创建对象的副本&#xff0c;而无需暴露对象的创建细节。在Java中&#xff0c;原型模式通常通过克隆对象来实现。要实现原型模式&#xff0c;需要满足以下条件&#xff1a; 被克隆的对…...

maven本地安装jar包install-file,解决没有pom的问题

背景&#xff1a; 公司因为权限问题&#xff0c;没有所有的代码&#xff0c;内部maven还在搭建&#xff0c;所以需要拿到同事的jar包&#xff0c;本地install&#xff1a; mvn install:install-file -DgroupIdcom..framework -DartifactIdcloud-api -Dversion1.0.0-SNAPSHOT …...

【C++学习笔记】5、变量作用域

文章目录 【 1、局部变量 】【 2、全局变量 】【 3、局部变量和全局变量的初始化 】 作用域是程序的一个区域&#xff0c;一般来说有三个地方可以定义变量&#xff1a; 在函数或一个代码块内部声明的变量&#xff0c;称为局部变量。 在函数参数的定义中声明的变量&#xff0c;称…...

Python中的装饰器

迷途小书童的 Note 读完需要 5分钟 速读仅需 2 分钟 装饰器是一个非常有用而又常被误解的功能&#xff0c;可以让我们在不修改函数或类的源代码情况下给它们提供扩展功能。本文将通过具体示例带你深入理解 Python 装饰器的用法。 1 装饰器基础 装饰器本质上是一个函数&#xff…...

什么是RESTful API,Spring MVC如何支持RESTful架构

文章目录 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;Java框架 ✨文章内容&#xff1a;Spring MVC支持RESTful架构 &#x1f91d;希望作者的文章能对你有所帮助&#xf…...

cin、cin.getline()、getline()的用法【C++】

一、cin>> 用法1&#xff1a;输入一个数字或字符 #include <iostream> using namespace std; int main () {int a,b;cin>>a>>b;cout<<ab<<endl;return 0; } 用法2&#xff1a;接收一个字符串&#xff0c;遇“空格”、“TAB”、“回车”…...

单向链表(c/c++)

链表是一种常见的数据结构&#xff0c;其中运用到了结构体指针&#xff0c;链表可以实现动态存储分配&#xff0c;换而言之&#xff0c;链表是一个功能强大的数组&#xff0c;可以在某个节点定义多种数据类型&#xff0c;可以实现任意的添加&#xff0c;删除&#xff0c;插入节…...

像linux 一样清理Windows C盘

像 linux 有命令 du -sh 查看文件夹大小 但是windows 可就没有这个命令了&#xff0c;就算有命令&#xff0c;也不能扫描子目录里面的文件 但是windows 可以借助 软件来清理&#xff0c;和linux 一样 文件上面是目录&#xff0c;下面是文件所占用空间大小的图&#xff0c;咋…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...