leetcode167. 两数之和 II - 输入有序数组

news2024/10/12 0:04:30

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。

以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1  index2

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

示例 1:

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

示例 2:

输入:numbers = [2,3,4], target = 6
输出:[1,3]
解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。

示例 3:

输入:numbers = [-1,0], target = -1
输出:[1,2]
解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

提示:

  • 2 <= numbers.length <= 3 * 104
  • -1000 <= numbers[i] <= 1000
  • numbers 按 非递减顺序 排列
  • -1000 <= target <= 1000
  • 仅存在一个有效答案

步骤1:问题分析

这是一个经典的双指针问题。给定一个已按非递减顺序排列的数组 numbers,从中找到两个数,使得它们的和等于指定的目标值 target。该问题的输入输出和限制条件如下:

  • 输入
    • 一个整数数组 numbers,长度范围为 [2, 3*10^4]
    • 一个整数 target,表示两个数的目标和。
  • 输出
    • 返回两个整数的下标 [index1, index2],满足 numbers[index1] + numbers[index2] = target1 <= index1 < index2 <= numbers.length
  • 限制条件
    • 只存在唯一解。
    • 数组已按非递减顺序排列。
    • 需要常量级的额外空间。

边界条件包括:

  • numbers 数组只有两个元素。
  • 数组中可能有负数。

步骤2:解题思路

由于数组已排序,且每个元素仅使用一次,因此最优解法是 双指针法,能够在 O(n) 时间复杂度内解决,并符合常量空间要求。

具体算法思路
  1. 初始化双指针

    • 定义 left 指针指向数组开头,right 指针指向数组末尾。
  2. 双指针遍历

    • 计算 leftright 指针所指元素的和。
    • 若和等于目标值 target,返回 [left+1, right+1](题目要求索引从 1 开始)。
    • 若和小于 target,增加 left 指针以增大和。
    • 若和大于 target,减小 right 指针以减小和。
  3. 终止条件

    • 当找到满足条件的两个数时退出循环,返回它们的索引。
算法复杂度分析
  • 时间复杂度:O(n),因为只需遍历数组一次。
  • 空间复杂度:O(1),只用到固定数量的指针和变量。

这种双指针方法能在常量空间内快速定位目标值,因此是最优解。

步骤3:C++代码实现

步骤4:启发与算法优化

  1. 启发:排序数组的特点可以简化许多查找问题。在本题中,我们利用了双指针技术,使得时间复杂度降到 O(n),并且仅用 O(1) 的空间。
  2. 优化思路:如果数组未排序,可先排序,再使用双指针方法,时间复杂度为 O(n log n),适用于较大的数据集。
  3. 效率提升:这种方法特别适用于数据规模大且已排序的查找类问题,避免了 O(n^2) 的复杂度。

步骤5:实际应用

应用场景:此算法在金融行业的配对交易策略中有广泛应用。例如,在证券市场中,配对交易策略要求找到成对的股票,使得在满足一定条件下购买一支股票并卖出另一支。

实际应用示例

假设有一组股票的收益预期值已按从低到高排序,交易员希望找到两支股票组合,其收益和达到某个指定目标收益。利用该算法可以高效地确定满足条件的股票对,而无需穷举所有组合。在实现上,将收益预期作为 numbers,目标收益作为 target,借助双指针法即可找到合适的股票对,快速执行配对交易。

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

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

相关文章

操作系统中的并发控制——使用条件变量同步

本期主题&#xff1a; 操作系统中的并发控制&#xff0c;条件变量 往期链接&#xff1a; linux设备驱动中的并发操作系统中的多线程问题——原子操作、自旋锁的底层实现操作系统并发控制——使用互斥锁实现同步 操作系统并发控制之条件变量同步 1. 问题描述2. 条件变量的API讲…

数据治理、数据清洗定义、区别以及数据清洗常用方法

一、数据治理定义 数据治理是一种组织数据管理的方法&#xff0c;涉及数据的收集、存储、处理、分析和共享等方面&#xff0c;旨在最大程度地利用数据资产并降低数据相关的风险。‌ 数据治理确保数据的质量、安全性、合规性和可用性&#xff0c;以支持组织的决策和运营活动。‌…

【Canvas与标牌】2024.10.8胜利大逃亡盾形标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>537.日期金盾Draft2上色</title><style type"text/css…

用Raspberry Pi Imager重装树莓派系统

今天删东西的时候&#xff0c;无意中把系统文件给remove了&#xff0c;结果树莓派无法正常启动&#xff0c;只能重新安装。 用DiskGenius工具将SD卡彻底清空&#xff0c;并将boot分区和文件分区合并为一&#xff0c;之后再对这个新分区进行了格式化。接下来就是烧录镜像了。以…

Java知识巩固(二)

OKracle JDK vs OpenJD 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle JDK 和 OpenJDK 之间是否存在重大差异&#xff1f;下面我通过收集到的一些资料&#xff0c;为你解答这个被很多人忽视的问题。 首先&#xff0c;2006 年 SUN 公司将 Java…

HTB:Bike[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What TCP ports does nmap identify as open? Answer with a list of ports seperated by commas with no spaces, from low to high. 2.What software is running the service listening on the http/web port identified in the first …

MVC案例整合Spring和Hibernate

说到整合Spring和Hibernate首先要搞清楚&#xff0c;整合什么&#xff1f; 1、使用Spring的IOC容器来生产Hibernate的SessionFactory对象实例 2、让Hibernate使用Spring的声明式事务 整合步骤 1、先加入Hibernate 2、在加入Spring&#xff0c;整合 新建项目&#xff0c;建…

38个巨魔神级APP,建议果粉收藏

本文介绍了2024年最常用的38个精选巨魔工具&#xff0c;整理不易&#xff0c;建议收藏。 工欲善其事&#xff0c;必先利其器。从我刚接触巨魔开始&#xff0c;我就发现很多人即使有了巨魔&#xff0c;也是两眼一摸黑。 除了多开APP、通话录音&#xff0c;不知道巨魔还有什么用…

图论day57|建造最大岛屿(卡码网)【截至目前,图论的最高难度】

图论day57|建造最大岛屿&#xff08;卡码网&#xff09;【截至目前所做的题中&#xff0c;图论的最高难度】 思维导图分析 104.建造最大岛屿&#xff08;卡码网&#xff09;【截至目前所做的题中&#xff0c;图论的最高难度】 思维导图分析 104.建造最大岛屿&#xff08;卡码网…

文件IO及目录操作

一、文件IO 1.1 close函数&#xff08;关闭文件&#xff09; #include <unistd.h>---所需头文件 int close(int fd); 功能&#xff1a;关闭文件 参数&#xff1a;fd&#xff1a;文件描述符 返回值&#xff1a;成功返回0&#xff0c;失败返回-1&#xff0c;置位错误码 …

C#代码 串口通信晋中A2板,控制直流电机

1&#xff0c;在电脑中给晋中板中下载编译好的程序。 0x39 &#xff1a;开启电机的标识 代码&#xff1a; /********************************************************************************** **** 实验名称&#xff1a;串口通信实验 接线说明&#xff1a; 实验现象&…

NRF24L01原子HAl库学习

IRQ产生中断有低电平&#xff0c;在TxFIFI发送完收到ACk后产生&#xff0c; 在RxFIFO收到数据后也产生 达到最大重发次数也产生 工作时序&#xff0c;SCK空闲状态为0&#xff0c;CPOL0,第一个时钟沿采集数据CPHA0,SPI工作模式0 另外SPI高位先出&#xff0c;低字节先出 30个寄…

2024年秋季学期期中考试成绩查询系统-老师制作工具

随着2024年的日历逐渐翻至末尾&#xff0c;我们迎来了本年度的最后一次期中考试。对于我们这些教育工作者而言&#xff0c;这段时间无疑是充满挑战与收获的。今天&#xff0c;我要向大家推荐一个创新的工具——“易查分”&#xff0c;它将彻底革新我们传统的成绩发布流程。通过…

【瑞萨RA8D1 CPK开发板】lcd显示

1.8寸lcd使用gpio模拟spi驱动 由于板子引出的接口限制&#xff0c;故使用gpio模拟spi驱动中景园的1.8寸lcd 1.77寸液晶屏 1.8寸TFT LCD SPI TFT彩屏st7735驱动128x160高清屏-淘宝网 (taobao.com) 使用RASC 的gpio配置 根据厂家提供的驱动文件移植 #define LCD_SCLK_Clr() g…

【MySQL】CRUD增删改查操作

文章目录 CRUD简介一、Creat 新增1.单行数据全列插入2.单行数据全指定列插入3.多行数据指定列插入 二、Retrieve 检索1.全列查询 --练习阶段最简单的查询&#xff1a;&#xff08;在生产环境最好不要用&#xff01;&#xff01;&#xff09;2.指定列查询3.结果去重查询4.where条…

Tomcat部署java项目,反馈漏洞CVE-2005-4900: TLS SHA-1 安全漏洞(中危) *

根据项目反馈漏洞处理&#xff0c;修复部署SSL证书时反馈TLS1.2版本漏洞&#xff1a; 漏洞描述如下&#xff1a; 漏洞类型&#xff1a;密码学问题 漏洞描述&#xff1a; TLS &#xff08;全称 Transport Layer Security&#xff0c;安全传输层 协议&#xff09;是一套用于在两…

Qt 数据库,人脸识别

数据库 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QMainWindow> #include<QSqlDatabase> QT_BEGIN_NAMESPACE namespace Ui { class widget; } QT_END_NAMESPACEclass widget : public QMainWindow {Q_OBJECTpublic:widget(QWidget *parent nullptr);…

HCIP-HarmonyOS Application Developer 习题(九)

(多选) 1、HarmonyOS多窗口交互能力提供了以下哪几种交互方式&#xff1f; A. 全局消息通知 B.平行视界 C.悬浮窗 D.分屏 答案&#xff1a;BCD 分析&#xff1a;系统提供了悬浮窗、分屏、平行视界三种多窗口交互&#xff0c;为用户在大屏幕设备上的多任务并行、便捷的临时任务…

项目 多人对话

项目 目标 多人对话仿真平台 技术点 socketIO异常多线程集合面向对象字符串GUI&#xff08;client&#xff09;… 项目开发方式 迭代开发-敏捷开发 建立模型 C/S 客户端/服务器模型(console) 服务器 package com.ffyc.tcp.one;import java.io.IOException; import java.i…

【大模型】RMS Normalization原理及实现

1.RMS Normalization的原理 说RMS Normalization之前&#xff0c;先讲Layer Normalization 和 Batch Normalization。 BN和LN是两种常见的归一化方法。它们的目的是帮助模型训练更稳定、收敛更快。BN是在Batch维度上进行归一化&#xff0c;即对同一batch中每个特征维度的值进行…