题解 | #两数之和#
两数之和
http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
1.暴力破解
class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
vector<int> res;
for(int i = 0;i < numbers.size(); ++i)
{
for(int j = i + 1;j < numbers.size(); ++j)
{
if(numbers[i] + numbers[j] == target)
{
res.push_back(i + 1);
res.push_back(j + 1);
return res;
}
}
}
return res;
}
}; 2.优化方法
使用哈希表存储值与下标,节省寻找第二个数字的时间
class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
unordered_map<int, int> map;
for(int i = 0;i < numbers.size(); ++i)
{
auto it = map.find(target - numbers[i]);
if(it != map.end())
return {it->second + 1, i + 1};
map[numbers[i]] = i;
}
return {};
}
}; 