【题目】
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
来源:leetcode
链接:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof/
【示例】
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
【示例2】
输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
【提示】
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6
【代码】
class Solution {
public:
int hashv[9999999]={0};
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> v;
for(auto x:nums)
hashv[x]=1;
for(int i=0;i<nums.size();i++)
if(target-nums[i]>0&&hashv[target-nums[i]]){
v.push_back(nums[i]);
v.push_back(target-nums[i]);
return v;
}
return v;
}
};
【双指针】
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int left = 0, right = nums.size()-1;
vector<int> result;
while(left<right){
int sum=nums[left]+nums[right];
if(sum==target){
result.push_back(nums[left]);
result.push_back(nums[right]);
return result;
}else if(sum>target)
right--;
else
left++;
}
return result;
}
};