一、题目:
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
二、解题思路:
依次循环每个元素作为第一个值,另一个值的大小则为target减去第一个值的结果,在数组剩下的元素里寻找这个结果,有就把这两个值下标+1加入容器中去。
三、代码和结果:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target){
int i = 0;
int bias = 0;
int lo , hi , mid;
vector<int> ans ;
while(i < numbers.size() -1)
{
bias = target - numbers[i];//bias = 目标值 - 第【i】个值
lo = i + 1;
hi = numbers.size() -1;
//二分法查找
while(lo < hi) //当low<hight
{
mid = lo + (hi - lo)/2;// mid取nums[i]后面的数组长度的中间
if(numbers[mid] < bias) {lo = mid + 1;}
else {hi = mid;}
}
if(numbers[lo] == bias) {ans.emplace_back(i+1); ans.emplace_back(lo+1);break;}//在容器尾部添加一个元素
++i;
}
return ans;
}
};
结果:
至此,over,加油!