1两数之和
注意图中圈出来的特殊情况。
思路1:排序后,采用双指针可以轻松求出这两个数的值。但是,题目要求的是满足条件的下标而不是两个数值。故,我们可以复制一下原数组,对新数组排序后,双指针拿到两个目标数字。再去元素组中一一对比获得目标数字在原数组中的下标。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> new_nums(nums);
sort(new_nums.begin(),new_nums.end());
int n_1;
int n_2;
int begin=0;
int end=nums.size()-1;
while(begin<end)
{
int sum = new_nums[begin]+new_nums[end];
if(sum==target)
{
n_1 = new_nums[begin];
n_2 = new_nums[end];
break;
}
else if(sum>target)
end--;
else
begin++;
}
vector<int> res;
int i=0; //保证出现相同的两个数字时
for(;i<nums.size();i++)
{
if(nums[i]==n_1)
{
res.push_back(i);
break;
}
}
for(int j=0;j<nums.size();j++)
{
if(nums[j]==n_2&&j!=i) ;//去重
{
res.push_back(j);
break;
}
}
return res;
}
};