看到题目第一眼想到了dfs,一部分原因也是因为前几天的题目都是DFS,而且两数之和也很符合DFS,但是我写了一下发现并不考研,之后又开始了暴力法,然后不出意外的超时了之后就是现在的AC代码了,以后组题目还是要看清楚题目在开始啊!!!
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target)
{
vector<int>res;
int l = 0, r = numbers.size() - 1;
while (l < r)
{
if (numbers[l] + numbers[r] == target)
{
res.push_back(l+1);
res.push_back(r+1);
return res;
}
if (numbers[l] + numbers[r] > target)
{
r--;
}
if (numbers[l] + numbers[r] < target)
{
l++;
}
}
return res;
}
};
也放上我的dfs代码把,应该没什么问题,但是!!!运行超时了,orz
class Solution {
public:
vector<int>res, ans;
void dfs(vector<int>& numbers, int target, int index,int sum)
{
if (sum==target&& ans.size() == 2)
{
res = ans;
return;
}
for (int i = index; i < numbers.size(); i++)
{
ans.push_back(i + 1);
dfs(numbers, target , i + 1,sum+numbers[i]);
ans.pop_back();
}
}
vector<int> twoSum(vector<int>& numbers, int target)
{
dfs(numbers, target, 0,0);
return res;
}
};