算法一:双循环遍历数组,但是时间复杂度高,时间会超时;
算法二:运用双指针指向头尾,判断两指针所指向的元素和与target相比,随着比较结果移动指针
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> ans;
//int *p=numbers;//头指针
//int *q=p+numbers.size()-1;//尾指针
int i=0;
int 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)
{
break;
}
}
ans.push_back(i);
ans.push_back(j);
return ans;
}
};