给你一个下标从 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
    仅存在一个有效答案
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本题是双指针最基础的应用。

没啥好说的,代码如下:

class Solution {
public int[] twoSum(int[] numbers, int target) {
int p1 = 0;
int p2 = numbers.length - 1;
while (p1 < p2) {
int sum = numbers[p1] + numbers[p2];
if (sum == target) {
return new int[] {p1 + 1, p2 + 1};
} else if (sum < target) {
p1 ++;
} else {
p2 --;
}
}
return new int[2];
}
}

运行结果:

最新文章

  1. 应用程序框架实战二十九:Util Demo介绍
  2. Calendar.get()方法--- WEEK_OF_YEAR 、MONTH、
  3. web应用性能测试-Tomcat 7 连接数和线程数配置
  4. C#运算符之与,或,异或及移位运算
  5. 经典sql(3)
  6. 流媒体开发之-腾讯体育NBA视频点播解析
  7. Hive 3、Hive 的安装配置(本地derby模式)
  8. poj2105---用指针对数组分块操作
  9. C++学习之运算符重载的总结
  10. XEvent – SQL Server Log文件对磁盘的写操作大小是多少
  11. C# 解析bt种子
  12. CrawlScript脚本语言实现网络爬虫
  13. 任务一:零基础HTML编码练习
  14. Android常用布局、文件存储与权限、XML
  15. ip xfrm命令是做什么的?
  16. HTML学习笔记01(标签)
  17. Java高级特性 第12节 XML技术
  18. 【CF961G】Partitions 第二类斯特林数
  19. 内置委托func
  20. Linux chpasswd (批量或单一修改用户密码)和passwd(直接修改用户密码)

热门文章

  1. 图解ReentrantLock底层公平锁和非公平锁实现原理
  2. Azure DevOps Server 用户组加入 Azure AD Domain Service 管理用户
  3. APACHE快速安装流程梳理
  4. JavaEE Day14 Servlet&amp;HTTP&amp;Request
  5. CTF隐写术总结
  6. Flutter和Rust如何优雅的交互
  7. 如何使用 EF Core 7 批量删除数据
  8. 重学c#系列—— 反射的基本理解[三十三]
  9. vulnhub靶场之GROTESQUE: 3.0.1
  10. appium基本使用(Android)