题目的意思是找出容器中的两个值,使他们相加等于目标值,返回这两个值的索引。值得注意的是:容器中的数值是按顺序排列的一看到题目首先想到的就是二重循环的,结果这样就会超时
class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) {
int size=numbers.size();
int i,j;
vector<int> res;
for(i=0;i<size;i++)
{
for(j=i+1;j<size;j++)
{
int result=numbers[i]+numbers[j];
if(result==target)
{ res.push_back(i+1);
res.push_back(j+1);
return res;}
}
}
}
};
看discuss里面,两头相加与目标值比较,如果大于,就将较大的值变小;如果比目标值小了,就将较小的值变大;
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int size=numbers.size();
int l=0;
while(l<numbers.size())
{
if(numbers[l]+numbers[size-1]==target)
{vector<int> res{l+1,size};
return res;}
else if(numbers[l]+numbers[size-1]>target)
size=size-1;
else
l=l+1;
}
}
};