题目
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
1. 思想
对于有序的数组,第一反应是二分还有双指针
2. 算法代码
vector<int> twoSum(vector<int>& nums, int target) {
if(nums.size()<=1) // 检查参数是否有效
return vector<int>{};
size_t left = 0, right = nums.size()-1;
long long sum;
while(left<right){
sum = nums[left] + nums[right]; // 整型相加要考虑是否溢出(上溢出和下溢出)
if(sum>target){
--right;
}else if(sum<target){
++left;
}else{
vector<int> ans{nums[left], nums[right]};
return ans;
}
}
return vector<int> {};
}
- 注意:(1)函数要检查输入的参数是否有效;(2)两个整型相加减都要考虑结果是否会溢出