面试经典150题——两数之和 II - 输入有序数组

"The only limit to our realization of tomorrow will be our doubts of today." 

- Franklin D. Roosevelt

white and brown city buildings during daytime

1. 题目描述

2.  题目分析与解析

2.1 思路一——暴力求解

暴力求解的思路就是通过两次for循环,外层循环遍历整个数组,内层循环遍历剩下的部分,也可以将其理解为双指针。

但是这种解法的时间复杂度是O(n^2),是很高的。所以我们在想一想有没有什么其他更好的解法。

2.2 思路二——头尾双指针

因为题目说了数组是按照非递减顺序排列的,那么我们就要充分运用这个信息。而题目又要求两个数相加之和等于target,那么我们是不是就可以用两个指针来表示两个加数?

假设我们的两个指针一个指向数组的头命名为head,一个指向数组的尾命名为end,又因为数组是非递减的,是不是就相当于我的一个加数指向了最大值,一个加数指向了最小值

那么我们是不是就可以尝试head+end=target ?如果相等,我们就返回,如果head+end > target,那么我们就可以把最大值 end变小,这样整体的和就会变小,再尝试相加。如果 head+end < target,那么就尝试把小的值 head变大,这样整体的和就会变大,再尝试相加。具体如下:

这样得到的head与end就是最终需要的结果了。

现在我们再来讨论一下为什么这样就行,因为总感觉没有经过证明的东西拿起来就不是那么的稳。用直观的表示来讲,我们的head与end分别代表了整个数组中的最小值与最大值,而因为head后有所有更大的值,end前有所有更小的值。

  • 假设我们还是刚才示例的数组numbers={2, 7, 11, 15},那么该numbers的所有可能的和假设为集合A,那么 A={9, 13, 17, 18, 22, 26}

  • 所以假设head自始至终都不动,end不断前移,也就是我们能从当前和一直变到整个可能性集合A中最小的和也就是 9 如下图所示:

  • 而如果假设end不动,head不断后移,也就是我们能从当前和一直变到整个可能性集合A中最大的和也就是 26 如下图所示:

现在我们再来看细一点:numbers的所有和的集合 A={9, 13, 17, 18, 22, 26},假设head还是指向头部,end还是指向尾部,下图第一行表示 end前移,而第二行表示head后移:

可以发现除了一个中间的和 18 其它的值都被覆盖了。而此时如果将head后移一位,再重复上述图示的步骤,肯定能获取到 18

其实也就是表示我通过head与end相加,以及通过head后移和end前移,肯定可以遍历出整个numbers可能的和的集合A的所有元素,而我的target肯定在A中,因为题目说了 仅存在一个有效答案

而换个解释就是说:我们的head和end相加的值,因为和target进行了比较,小了就变大,打了就变小,所以说就是不断向target收缩的过程,假设我们的 target=18

通过小了就变大,大了就变小的原则,不断向target靠近,直到找到target。所以通过这种方法

  • 第一能找到所有可能的和,不用担心缺了某一个和而导致找不到target。

  • 第二我是通过不断向目标收缩的过程去找寻目标,而目标肯定在我的到的小了与大了的范围之内,拿上述例来说就是 17小了 和 22大了 这个【17,22】范围之内,而我是有小了就变大和大了就变小的原则,因此只能在17和22这个范围不断收缩,这样就能不断贴近目标直到找到目标。

思路二:更好的解释(引自Leetcode nettee)

(侵权请告知,立删)

3. 代码实现

3.1 思路一——暴力求解

3.2 思路二——头尾双指针

4. 运行结果

4.1 思路一——暴力求解

4.2 思路二——头尾双指针

5. 相关复杂度分析

5.1 思路一——暴力求解

  • 时间复杂度:O(n^2),其中 n 是数组的长度。遍历数组的每个元素,每个元素还需要遍历其后面的元素。

  • 空间复杂度:O(1)。

5.2 思路二——头尾双指针

  • 时间复杂度:O(n),其中 n 是数组的长度。两个指针移动的总次数最多为 n 次。

  • 空间复杂度:O(1)。

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

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

相关文章

CSP-202109-1-数组推导

CSP-202109-1-数组推导 解题思路 如果 currentValue 与 previousValue 相同&#xff0c;说明这个值不是一个独特的新值&#xff0c;因此只将它加到 sumTotal 上。如果 currentValue 与 previousValue 不相同&#xff0c;说明这是一个新的独特值&#xff0c;因此既将它加到 su…

精简还是全能?如何在 Full 和 Lite 之间做出最佳选择!关于Configuration注解的Full模式与Lite模式(SpringBoot2)

&#x1f3c3;‍♂️ 微信公众号: 朕在debugger© 版权: 本文由【朕在debugger】原创、需要转载请联系博主&#x1f4d5; 如果文章对您有所帮助&#xff0c;欢迎关注、点赞、转发和订阅专栏&#xff01; 前言 关于 Configuration 注解&#xff0c;相信在座的各位 Javaer 都…

【开源】JAVA+Vue.js实现在线课程教学系统

目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2.3 课时管理模块2.4 课程交互模块2.5 系统基础模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示4.1 管理后台4.2 用户网页 五、样例代码5.1 新增课程类型5.2 网站登录5.3 课…

计算机速成课Crash Course - 30. 万维网

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章&#xff0c;全网首发公众号 “摸鱼IT” 锁定 -上午11点 - &#xff0c;感谢大家关注、转发、点赞&#xff01; 计算机速成课Crash Course - 30. 万维网 (qq.com) 30. 万维网 前两集我们深入讨论了电线、信号、交…

【DC渗透系列】DC-4靶场

主机发现 arp-scan -l┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:6b:ed:27, IPv4: 192.168.100.251 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.100.1 00:50:56:c0:00:08 …

Gateway API 实践之(八)FSM Gateway SSL 代理终端与 TLS 上游

FSM Gateway 流量管理策略系列&#xff1a; 故障注入黑白名单访问控制限速重试会话保持健康检查负载均衡算法TLS 上游双向 TLS 网关使用 HTTP 对外与客户端通信&#xff0c;而与上游服务使用 HTTPS 的功能&#xff0c;是一种常见的网络架构模式。在这种模式下&#xff0c;网关…

跟着cherno手搓游戏引擎【23】项目维护、2D引擎之前的一些准备

项目维护&#xff1a; 修改文件结构&#xff1a; 头文件自己改改就好了 创建2DRendererLayer&#xff1a; Sandbox2D.h: #pragma once #include "YOTO.h" class Sandbox2D :public YOTO::Layer {public:Sandbox2D();virtual ~Sandbox2D() default;virtual void O…

阿里云服务器租用价格表_2024一年_1个月_1小时收费价格表

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

LabVIEW工业监控系统

LabVIEW工业监控系统 介绍了一个基于LabVIEW软件开发的工业监控系统。系统通过虚拟测控技术和先进的数据处理能力&#xff0c;实现对工业过程的高效监控&#xff0c;提升系统的自动化和智能化水平&#xff0c;从而满足现代工业对高效率、高稳定性和低成本的需求。 随着工业自…

时间序列预测 —— DeepAR 模型

时间序列预测 —— DeepAR 模型 DeepAR 模型是一种专门用于处理时间序列概率预测的深度学习模型&#xff0c;它可以自动学习数据中的复杂模式&#xff0c;提高预测的准确性。本文将介绍 DeepAR 模型的理论基础、优缺点&#xff0c;并通过 Python 实现单步预测和多步预测的完整…

51单片机编程应用(C语言):串口通信

目录 通信的基本概念和种类 1.1串行通信与并行通信 ​编辑 1.2同步通信与异步通信 1.3单工&#xff0c;半双工&#xff0c;全双工 1.4通信速率 二、波特率和比特率的关系 串口通信简介&#xff1a; 1.接口标准 RS-232 2、D型9针接口定义 3.通信协议&#xff1a; …

金和OA C6 RssModulesHttp.aspx SQL注入漏洞复现

0x01 产品简介 金和网络是专业信息化服务商,为城市监管部门提供了互联网+监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 0x02 漏洞概述 金和OA C6 RssModulesHttp.aspx接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入…

018 Linux

文章目录 操作系统定义分类Linux系统构成 Linux文件系统Linux常用命令基础操作命令文件操作压缩解压权限管理显示展示命令其他命令 vi编译器操作使用 添加用户基本概念用户管理命令 ubuntu软件安装ssh服务终端启动Python服务 操作系统 定义 操作系统是管理计算机硬件与软件资…

【Linux系统学习】 4.Linux实用操作 上

Linux实用操作 1.各类小技巧&#xff08;快捷键&#xff09; 1.1 ctrl c 强制停止 Linux某些程序的运行&#xff0c;如果想要强制停止它&#xff0c;可以使用快捷键ctrl c 命令输入错误&#xff0c;也可以通过快捷键ctrl c&#xff0c;退出当前输入&#xff0c;重新输入 1…

前端JavaScript篇之如何获得对象非原型链上的属性?

目录 如何获得对象非原型链上的属性&#xff1f; 如何获得对象非原型链上的属性&#xff1f; 要获取对象上非原型链上的属性&#xff0c;可以使用 hasOwnProperty() 方法。这个方法是 JavaScript 内置的对象方法&#xff0c;用于检查一个对象是否包含指定名称的属性&#xff0…

数字孪生与智慧园区的融合:打造未来产业生态的新篇章

随着科技的飞速发展&#xff0c;数字孪生和智慧园区已经成为当今社会发展的重要趋势。数字孪生技术为物理世界的对象提供了数字化的复制体&#xff0c;而智慧园区则通过各种信息技术手段实现园区的智能化管理。二者的融合&#xff0c;将为未来产业生态的发展开辟新的篇章。 一…

大华智慧园区综合管理平台 deleteFtp RCE漏洞复现

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

LLM大语言模型(六):RAG模式下基于PostgreSQL pgvector插件实现vector向量相似性检索

目录 HightLightMac上安装PostgreSQLDBever图形界面管理端创建DB 使用向量检索vector相似度计算近似近邻索引HNSW近似近邻索引示例 HightLight 使用PostgreSQL来存储和检索vector&#xff0c;在数据规模非庞大的情况下&#xff0c;简单高效。 可以和在线业务共用一套DB&#…

【PyQt】08 - 编辑Tab顺序

文章目录 前言一、Tab顺序二、编辑Tab顺序总结 前言 介绍了什么是Tab顺序&#xff0c;以及如何修改Tab顺序。 一、Tab顺序 当你的界面设计好之后&#xff0c;在输入栏按住Tab按键&#xff0c;他会按照你摆放的顺序一次转跳 二、编辑Tab顺序 方法一 然后鼠标左击就可以改变…

【力扣】快乐数,哈希集合 + 快慢指针 + 数学

快乐数原题地址 方法一&#xff1a;哈希集合 定义函数 getNext(n) &#xff0c;返回 n 的所有位的平方和。一直执行 ngetNext(n) &#xff0c;最终只有 2 种可能&#xff1a; n 停留在 1 。无限循环且不为 1 。 证明&#xff1a;情况 1 是存在的&#xff0c;如力扣的示例一…