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

day46——两数之和-输入有序数组(LeetCode-167)

题目描述

给你一个下标从 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、首尾两头向中间遍历,循环遍历

2、比较大小,决定左侧先移动还是右侧先移动

函数源码:

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {int l= 0, r = numbers.size() - 1, sum=0;while (l < r) {sum = numbers[l] + numbers[r];if (sum == target) break;if (sum < target) ++l;else --r;}return vector<int>{l + 1, r + 1};}
};
http://www.dtcms.com/a/142521.html

相关文章:

  • PHP怎样连接MySQL数据库?
  • python函数之间嵌套使用yield
  • sqli-labs之Less-7 GET注入写shell
  • CPU与GPU之间的交互
  • 【C++】新手入门指南(上)
  • Linux-进度条小程序
  • webpack 中 chunks详解
  • 论文降重GPT指令-实侧有效从98%降低到8%
  • SQL注入相关知识
  • 【解决】torch引入过程中的ImportError: __nvJitLinkAddData_12_1, version libnvJitLink.so.12
  • 阿里云Clickhouse 冷热数据分层存储 实战记录
  • 递归下降 ll(1) 型文法 识别二元组文法分析
  • 从零开始学习 Lucene.Net:.NET Core 中的全文搜索与索引管理
  • [密码学基础]GMT 0002-2012 SM4分组密码算法 技术规范深度解析
  • Windows系统C盘深度清理指南
  • 指令与权限
  • 基于大语言模型的自动化单元测试生成系统及测试套件评估方法
  • 【多线程5】面试常考锁知识点
  • java ai 图像处理
  • Shiro-550 动调分析与密钥正确性判断
  • 【网络编程】TCP数据流套接字编程
  • 基础数学知识-线性代数
  • 【C++ Qt】信号和槽(内配思维导图 图文并茂 通俗易懂)
  • 代码规范之命名方式
  • 相机模型--CMOS和CCD的区别
  • Linux网络编程 深入解析Linux TCP:TCP实操,三次握手和四次挥手的底层分析
  • 第七周作业
  • Neovim插件深度解析:mcphub.nvim如何用MCP协议重构开发体验
  • 数字孪生赋能管理系统,降本增效立竿见影
  • Manus技术架构、实现内幕及分布式智能体项目实战