leetcode打卡
twosum:
vector<int> twoSum(vector<int>& nums,int target){
//对数组排序
sort(nums.begin(),nums.end());
//左右指针
int lo = 0,hi = nums.size() - 1;
while(lo<hi){
int sum = nums[lo] +nums[hi];
if(sum<target){
lo++;
}
else if(sum > target){
hi--;
}
else if(sum ==target){
return{nums[lo],nums[hi]};
}
}
return {};
}
如果有多对元素之和都等于target
通用代码
vector<vector<int>> twoSumTarget(vector<int>& nums, int target) {
// nums 数组必须有序
sort(nums.begin(), nums.end());
int lo = 0, hi = nums.size() - 1;
vector<vector<int>> res;
while (lo < hi) {
int sum = nums[lo] + nums[hi];
int left = nums[lo], right = nums[hi];
if (sum < target) {
while (lo < hi && nums[lo] == left) lo++;
} else if (sum > target) {
while (lo < hi && nums[hi] == right) hi--;
} else {
res.push_back({left, right});
while (lo < hi && nums[lo] == left) lo++;
while (lo < hi && nums[hi] == right) hi--;
}
}
return res;
}
等于target