【LeetCode最详尽解答】167-两数之和 II-输入有序数组 Two-Sum-II-Input-Array-Is-Sorted

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

链接:

  • 167-两数之和 II-输入有序数组

直觉

这是一个典型的双指针问题。

输入:numbers = [2, 7, 11, 15], target = 9

输出:[1, 2]

解释:27 的和是 9。因此,index1 = 1, index2 = 2。我们返回 [1, 2]

我们将左指针初始化在数组的起始位置,将右指针初始化在数组的末尾。while 循环条件是 while l < r。如果 nums[l] + nums[r] 的和小于目标值,我们将左指针右移,因为数组是按升序排序的。如果和大于目标值,我们将右指针左移以减少和。如果和等于目标值,我们返回索引 [l + 1, r + 1]

我们应该在每次循环迭代中只移动左指针或右指针一次。否则,我们可能会错过正确的配对。例如,以下是一个错误的解决方案:

def twoSum(self, numbers, target):""":type numbers: List[int]:type target: int:rtype: List[int]"""l = 0r = len(numbers) - 1while numbers[l] + numbers[r] > target:r -= 1while numbers[l] + numbers[r] < target:l += 1return [l+1, r+1]

这个解决方案是错误的。考虑 [1, 2, 3, 4, 4, 9] 和目标值 8。它将返回 [0, 5],但它应该返回 [4, 5]。指针移动逻辑没有考虑同时检查两个指针。只调整一个指针可能会错过有效的配对,并且不处理边界条件。

方法

  1. 设置两个指针:左指针在数组的起始位置(l = 0),右指针在数组的末尾(r = len(numbers) - 1)。
  2. l < r 时迭代:
    • 如果 numbers[l] + numbers[r] 的和小于目标值,将左指针右移(l += 1)。
    • 如果和大于目标值,将右指针左移(r -= 1)。
    • 如果和等于目标值,返回索引 [l + 1, r + 1](基于 1 的索引)。

复杂度

  • 时间复杂度:
    O ( n ) O(n) O(n)

    • 我们最多用两个指针遍历列表一次,时间复杂度是线性的。
  • 空间复杂度:
    O ( 1 ) O(1) O(1)

    • 我们只使用了常量空间来存储指针和临时变量。

代码

class Solution(object):def twoSum(self, numbers, target):""":type numbers: List[int]:type target: int:rtype: List[int]"""l = 0r = len(numbers) -1while l < r:if numbers[l] + numbers[r] < target:l+=1elif numbers[l] + numbers[r] > target:r-=1else:return[l+1, r+1]

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

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

相关文章

gbase8s数据库阻塞检查点和非阻塞检查点的执行机制

1. 检查点的描述 为了便于数据库系统的复原和逻辑恢复&#xff0c;数据库服务器生成的一致性标志点&#xff0c;称为检查点&#xff0c;其是建立在数据库系统的已知和一致状态时日志中的某个时间点检查点的目的在于定期将逻辑日志中的重新启动点向前移动 如果存在检查点&#…

HTML DOM 对象

HTML DOM 对象 1. 概述 HTML DOM(文档对象模型)是一个跨平台和语言独立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。在HTML DOM中,文档被表示为节点树,其中每个节点代表文档中的一个部分,例如元素、文本或属性。HTML DOM对象是构成这个节点树的基…

Windows 服务器Nginx 下载、部署、配置流程(图文教程)

不定期更新 目录 一、下载Nginx安装包 二、上传安装包 三、启动Nginx 四、Nginx常用命令 五、Nginx&#xff08;最小&#xff09;配置详解 六、Nginx&#xff08;基础&#xff09;配置详解 七、反向代理 八、负载均衡 九、动静分离 十、报错 一、下载Nginx安装包 四…

【源码】综合股票币币合约交易所源码/etf交易所源码/美股港股台股交易所源码

支持多国语言 全开源可二开的一个版本&#xff01;支持虚拟货币 ETF 外汇 美股 A股 港股 台股。 前端是VUE开发&#xff08;带vue工程源码&#xff09;后端JAVA开发&#xff01;搭建也相对简单。 总的来说功能非常强大&#xff0c;适合线上运营的一个版本&#xff0c;有兴趣的可…

(53)MOS管专题--->(08)MOS管N沟道MOS管

(08)MOS管N沟道MOS管 1 目录 (a)IC简介 (b)数字IC设计流程 (c)Verilog简介 (d)MOS管N沟道MOS管 (e)结束 1 IC简介 (a)在IC设计中,设计师使用电路设计工具(如EDA软件)来设计和模拟各种电路,例如逻辑电路、模拟电路、数字信号处理电路等。然后,根据设…

【因果推断python】38_预测模型1

目录 工业界中的机器学习 之前的部分涵盖了因果推理的核心。那里的技术是众所周知和成熟的。他们经受住了时间的考验。第一部分建立了我们可以依赖的坚实基础。用更专业的术语来说&#xff0c;第一部分侧重于定义什么是因果推理&#xff0c;哪些偏差会阻止相关性成为因果关系&…

支付数据安全

支付数据安全是确保支付系统和用户信息安全的关键环节&#xff0c;以下是一些可以采取的措施来增强支付数据的安全性&#xff1a; 数据加密&#xff1a;使用强加密算法来保护存储和传输中的支付数据&#xff0c;确保即使数据被截获也无法被未授权者读取[26]。 使用安全的通信协…

自定义防抖注解

问题场景 在开发中由于可能存在的网络波动问题导致用户重复提交&#xff0c;所以自定义一个防抖注解。设计思路&#xff1a;自定义注解加在接口的方法上&#xff0c;注解中设置了SPEL表达式&#xff0c;可以通过SPEL表达式从接口参数中提取Redis的Key&#xff0c;以这个Key作为…

空气的物性解释

什么是空气&#xff1f;什么是常态空气&#xff1f;空气就是我们生活在其中的大气。常态空气是一个规定的值&#xff08;不同国家有所不同&#xff09;&#xff1a;压力0.1MPa&#xff08;或者说是1个标准大气压&#xff09;、温度20℃、相对湿度为36%状态下称之为常态空气。常…

Techo TVP技术 沙龙

Techo TVP技术 沙龙 今天参加了 在上海 徐汇 腾讯云大厦 举办的 Techo TVP 技术沙龙&#xff08;主要介绍 AI agent 让我感受很深&#xff09; &#xff0c;那什么是 AI Agent呢&#xff1f; 是一个智能体&#xff0c;由大语言模型驱动&#xff0c;具有自主理解、感知、规划、…

MISSING COURSE-shell

shell 01 what is the shell q: linux如何操作计算机硬件cpu 内存 磁盘 显示器等 a:使用linux的内核操作 1.shell -is命令 shell通过编写shell命令 发送给linux内核 去执行 操作就是计算机硬件 so shell 是用户操作计算机 类似于windows里的dos命令 shell是一门程序设计语言…

《分析模式》漫谈03- Unified Method并不是RUP

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在《分析模式》第2章 &#xff0c;Fowler提到了“Rational Softwares Unified Method”&#xff0c; 而且给出了引用的参考文献&#xff0c;是Rational公司的一份文档&#xff1a; 200…

数字电路中二进制的数据表达

文章目录 1. 二进制数据表达 1.1 二进制简介 1.2 用二进制表达文字 1.2.1 最开始的表达方式 1.2.2 通讯系统的编码和解码 1.2.3 集成电路 1.2.4 ASCII编码 1.2.5 GBK编码 1.2.6 Unicode编码 2. 用二进制表达图像 2.1 图片像素化 2.2 像素数字化 2.3 二值图像 2.4…

Git冲突解决指南:如何优雅地解决代码合并冲突

在团队协作开发中&#xff0c;使用版本控制系统Git是非常常见的。然而&#xff0c;在多人同时对同一文件进行修改时&#xff0c;就可能出现代码合并冲突。这时就需要我们学会如何优雅地解决这些冲突&#xff0c;保证代码的完整性和质量。本文将为您介绍Git冲突解决的基本原则和…

string类的使用手册

1.构造函数 补充&#xff1a;npos&#xff1a;size_t类型数据的最大值 default (1) string(); 构造空的string类对象 copy (2) string (const string& str); 拷贝构造函数&#xff08;深拷贝&#xff09; substring (3) string (const string& str, size_t pos, size_…

在 dingo api 路由中使用 middleware

在使用dingo api路由中使用middleware api.throttle 节流中间件遇到的问题 $api->group([middleware > [auth:api]],function ($api) {$api->get(getUserInfo, [middleware > [api.throttle],limit > 1,expires > 1], App\Http\Controllers\Users\UserContr…

HTML 颜色名:网页设计的调色板

HTML 颜色名:网页设计的调色板 在网页设计和开发中,颜色是一个关键元素,它不仅影响视觉效果,还能传达情感和品牌信息。HTML 颜色名是用于在 HTML 和 CSS 代码中指定颜色的预定义名称。这些颜色名易于记忆,方便设计师和开发者快速选择和应用颜色。本文将详细介绍 HTML 颜色…

自动化测试火狐下载文件

本篇文章介绍selenium中火狐浏览器如何下载文件。比如我想把这个MP4的视频文件下载下来。 点击之后查看下载的类型是video/mp4 指定使用火狐浏览器 profile webdriver.FirefoxOptions() # 设置firefox默认的下载路径&#xff0c;0表示桌面&#xff0c;1表示我的下载&#xf…

linux shell-awk样例

需求&#xff1a; 从 hive-server2.log 中截取所有当天日志&#xff0c;并统计其时间的平均值和时长最长的时间 hive-server2.log 2024-05-01 12:00:00 INFO [HiveServer2] Starting query execution 2024-05-01 12:00:01 INFO [HiveServer2] Query executed successfully i…

20. 第20章 调试

20. 调试 调试程序时, 应当区分不同类型的错误, 以便更快地查找出错误的原因.* 语法错误(semantic error): 在将源代码翻译成字节码的过程中有解释器发现.它们通常表示有程序结构错误.例如, 在def语句的末尾漏掉冒号, 会产生一个有些冗余的错误信息SyntaxErroe: invalid synta…