题目:
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.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
思路:
当然这道题目最简单的做法是采用暴力解法,一个一个值去轮询,但是复杂度非常高。所以想到以空间换时间的方法,使用一个map容器,<pre name="code" class="cpp" style="color: rgb(70, 70, 70); font-size: 14px;">先将输入放入一个容器中,key为数组值,value为数组键,之后只需确定目标值与轮询值之间的差是否存在,即可获得最后的结果。
<pre name="code" class="cpp" style="color: rgb(70, 70, 70); font-size: 14px;">本人采取的是map容器,map容器采用的是红黑树,其时间复杂度为O(log n)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
int i;
vector<int> results;
map<int, int> harh_map;
for(i=0;i<nums.size();i++)
harh_map.insert(pair<int,int>(nums[i],i));
for(i=0;i<nums.size();i++)
{
int n = harh_map.count(target-nums[i]);
if(n && (harh_map[target-nums[i]])!=i)
{
results.push_back(i);
results.push_back(harh_map[target-nums[i]]);
break;
}
}
return results;
}
};