和为s的两个数字
题目
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
1 < = n u m s . l e n g t h < = 1 0 5 , 1 < = n u m s [ i ] < = 1 0 6 1 <= nums.length <= 10^5, 1 <= nums[i] <= 10^6 1<=nums.length<=105,1<=nums[i]<=106
思路
因为数组是已经排好序的,设置头尾两个指针,依次往中间走即可找到满足的两个数字,时间复杂度 O ( n ) O(n) O(n)。
**C++ **
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int start = 0;
int end = nums.size()-1;
vector<int> res(2);
while(start<end)
{
if(nums[start]+nums[end]<target)
++start;
else if(nums[start]+nums[end]>target)
--end;
else
{
res[0] = nums[start];
res[1] = nums[end];
break;
}
}
return res;
}
};
python
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
start, end = 0, len(nums)-1
res = [0]*2
while start<end:
if nums[start]+nums[end]<target:
start += 1
elif nums[start]+nums[end]>target:
end -= 1
else:
res[0] = nums[start]
res[1] = nums[end]
break
return res