167. 两数之和II - 输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值index1 和 index2,其中 index1 必须小于 index2。
说明:
示例:
输入: numbers = [2,7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
第一种方法:
个人采用暴力破解,采用二分法历遍数组,找到符合题目要求数据的下标。
classSolution
{
public:
int binary_search(vector& arr, inti, intnum)
{
int len = arr.size() - 1;
int left(i+1);
int right(len);
while (left <= right)
{
int mid = (left +right) / 2;
if (arr.at (mid) == num) //at(),C++11语法
return mid;
else if (arr.at(mid) < num)
{
left= mid + 1;
}
else
{
right= mid - 1;
}
}
return -1;
}
vector twoSum(vector& numbers, inttarget)
{
vector ans; //vector ans 类似与int ans[]
for (int i(0); numbers[i] <= number.size(); i++)
{
int num = target - numbers[i];
int flage =binary_search(numbers, i,num);
if (flage > 0)
{
ans.push_back(i+ 1);
ans.push_back(flage+ 1);
return ans;
}
}
}
};