标签:target nums lo while vector hi 两数
// 返回和为target的两个元素
vector<int> twoSum(vector<int> nums, int target){
sort(nums.begin(),nums.end());
int lo = 0, hi = nums.size()-1;
vector<int> ans;
while(lo<hi){
if(nums[lo]+nums[hi]==target){
ans.push_back(nums[lo]);
ans.push_back(nums[hi]);
return ans;
} else if(nums[lo]+nums[hi]<target) lo++;
else hi--;
}
return {};
}
//返回和为target的两个元素(所有),添加略过相同元素模块
vector<int> twoSum(vector<int> nums, int target){
sort(nums.begin(),nums.end());
int lo = 0, hi = nums.size()-1;
vector<int> ans;
while(lo<hi){
if(nums[lo]+nums[hi]<target) while(nums[lo]==nums[lo+1] && nums[lo+1]+nums[hi]<target) lo++;
else if(nums[lo]+nums[hi]>target) while(nums[hi-1]==nums[hi] && nums[lo]+nums[hi-1]>target) hi--;
else if(nums[lo]+nums[hi] == target){
ans.push_back(nums[lo]);
ans.push_back(nums[hi]);
while(nums[lo+1]+nums[hi] == target) lo++;
while(nums[lo]+nums[hi-1] == target) hi--;
}
}
return ans;
}
//改良版
// 优化版本
vector<int> twoSum(vector<int> nums, int target){
sort(nums.begin(),nums.end());
int lo = 0, hi = nums.size() - 1;
vector<vector<int>> ans;
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{
ans.push_back({left,right});
while(lo<hi && nums[lo] == left) lo++;
while(lo<hi && nums[hi] == right) hi--;
}
}
return ans;
}
标签:target,nums,lo,while,vector,hi,两数 来源: https://www.cnblogs.com/maxwell-maxwill/p/15410786.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。