Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
暴力解, 通过数组遍历来实现
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
int length = nums.size();
for (int i = 0; i < length - 1; ++i)
{
int temp = target - nums[i];
for (int j = i + 1; j < length; ++j)
{
if (nums[j] == temp)
{
ans.push_back(i);
ans.push_back(j);
return ans;
}
}
}
return ans;
}
};
利用无序的map容器来实现,逐个遍历数组中的元素,然后在无序容器中查找另一个元素,如果找不到,就把当前元素的值及下标加入无序容器。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
unordered_map<int, int> hash;
int length = nums.size();
for (int i = 0; i < length; ++i)
{
int temp = target - nums[i];
if (hash.count(temp))
{
ans.push_back(hash[temp]);
ans.push_back(i);
return ans;
}
hash[nums[i]] = i;
}
return ans;
}
};