题目
剑指 Offer II 006. 排序数组中两个数字之和
给定一个已按照 升序排列 的整数数组 nums ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < nums.length 。
假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。
原题链接 : 【点此查看】
分析
由于是已经排序好的数组,那么利用首尾双指针解法,定义两个下标 left和right,如果nums[left] + nums[right] == target,那么就说明找到了,直接返回,如果小于target说明左边的数字太小,将左指针右移,反之将右指针左移。
题解
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
if (n < 2) return {};
vector<int> ans;
int left = 0, right = n - 1;
while (left < right)
{
int tmp = nums[left] + nums[right];
if (tmp == target)
{
ans.push_back(left);
ans.push_back(right);
return ans;
}
else if (tmp > target)
{
right--;
}
else{
left++;
}
}
return ans;
}
};