题目:
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
twoSum(vector
& nums, int target) {
bool flag = 0;
vector
result;
int temp_size = nums.size()-1;// if don't use this variable,just write it in for(;i
注意两点:
1.如果将写成for(int i=0; i<sums.size()-1;i++),leetcode会报compile error,这时需要一个变量来存sums.size()-1;
2.发现第一个for循环里面如果只遍历到数组倒数第二个数,但是用一个单独变量来存储sums.size()-1,总的运行时间会比循环sums.size()次稍慢。
精简一点版本:
使用unordered_map
class Solution {
public:
vector
twoSum(vector
& nums, int target) {
vector
result;
unordered_map
findTheRest;
for (int i = 0; i < nums.size(); i++)
{
int theRest = target - nums[i];
if (findTheRest.find(theRest) != findTheRest.end())
{
result.push_back(findTheRest[theRest]);
result.push_back(i);
break;
}
findTheRest[nums[i]] = i;
}
return result;
}
};
原理一样,运行更快的版本:
class Solution {
public:
vector
twoSum(vector
& nums, int target) {
unordered_map
findTheRest;
for (int i = 0; i < nums.size(); i++)
{
int theRest = target - nums[i];
if (findTheRest.find(theRest) != findTheRest.end())
{
return{findTheRest[theRest],i};
}
findTheRest[nums[i]] = i;
}
return {};
}
};