[LeetCode] 167_两数之和
题目要求
题目分析
重点在于减而治之,抛弃不可能选项
- 设置i,j分别指向数组的头尾
- 因为j所指向的数是当前最大的,如果和还是比目标值小,那么i向后移
- 因为i所指向的数是当前最小的,如果和还是比目标值大,那么j向前移
注意点
- 注意i和j的初始值
- 可以在循环内使用while循环减少相等的判断
代码
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int i=0,j=numbers.size()-1;
vector<int>ans;
while(i<j){
if(numbers[i]+numbers[j]==target){
ans.push_back(i+1);
ans.push_back(j+1);
return ans;
}
while(numbers[i]+numbers[j]<target)++i;
while(numbers[i]+numbers[j]>target)--j;
}
return ans;
}
};