链接:Two Sum
描述:在数组中找到两个数,他们相加的和等于目标,返回这两个数的索引。
思路:可以采用朴素解法,两层循环,但如果数据过多,将会导致超时。更好的办法是采用哈希表保存对应加数的索引并搜索。
解法:
class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { vector<int> res; map<int,int> pos; int sz = (int)numbers.size(); for(int i=0; i<sz; i++) { // 搜索与当前加数对应的另一加数 auto it = pos.find(target - numbers[i]); // 如果没找到,则把当前加数的索引保存起来,并继续搜索 if(it == pos.end()) { pos[numbers[i]] = i; } // 找到了另一个加数 else{ res.push_back(it->second); res.push_back(i); break; } } return res; } };