当前位置:网站首页>leetcode 006. 排序数组中两个数字之和
leetcode 006. 排序数组中两个数字之和
2022-08-04 16:16:00 【Promising_mi】
给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。
假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。
示例 1:
输入:numbers = [1,2,4,6,10], target = 8
输出:[1,3]
解释:2 与 6 之和等于目标数 8 。因此 index1 = 1, index2 = 3 。
示例 2:
输入:numbers = [2,3,4], target = 6
输出:[0,2]
提示:
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers 按 递增顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案
思路:
使用双指针来判断 2个数的和 和 target 的关系。
i , j 指针分别指向头部和尾部,
- 如果他们的和大于 target ,那么将 尾指针 向前移,因为后面的数可能本身就大于 target,将 i 向后移的话,2个数的和只会比target更大。
- 如果他们的和小于 target ,将 i 向后移动。
- 如果2个数的和等于 target 且 i != j (即满足一个数不能使用2次),那么就找到了。
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> v;
int i=0,j=numbers.size()-1;
while(i<j){
if(numbers[i]+numbers[j]>target)
--j;
else if(numbers[i]+numbers[j]<target)
++i;
else if(numbers[i]+numbers[j]==target&&i!=j){
v.push_back(i);
v.push_back(j);
break;
}
}
return v;
}
};
边栏推荐
- 如何防止重复下单?
- GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
- 面渣逆袭:MySQL六十六问,两万字+五十图详解
- 花 30 美金请 AI 画家弄了个 logo,网友:画得非常好,下次别画了!
- 开源一夏 | 请你谈谈网站是如何进行访问的?【web领域面试题】
- Tomato assistant downloading tomatoes
- seaborn
- DocuWare Platform - Content Services and Workflow Automation Platform for Document Management (Part 1)
- 无心剑七绝《七夕牵手》
- 录音文件识别
猜你喜欢
随机推荐
现代 ABAP 编程语言中的正则表达式
Check which user permissions are assigned to each database, is there an interface for this?
Tomato assistant downloading tomatoes
seaborn
吴恩达机器学习[9]-神经网络学习
什么是会话劫持攻击以及如何防止会话劫持
HCIP笔记(6)
Visual Studio 2022创建项目没有CUDA模板的解决方法
备战9月,美团50道软件测试经典面试题及答案汇总
Typora收费?搭建VS Code MarkDown写作环境
【Jprofile 11.0 安装】
基本的SELECT语句
转型阵痛期,好未来减亏容易增收难?
To ensure that the communication mechanism
dot net double 数组转 float 数组
An article to answer what is the product library of the DevOps platform
寻找消失的类名
【JVM】JVM调优
MySQL 性能调优和优化技巧
“敏捷欺骗了开发人员”