欢迎访问我的lintcode题解目录https://blog.csdn.net/richenyunqi/article/details/80686719
算法设计:
利用散列的方法,建立一个散列表unordered_map<int,int>m,键存储数组中元素的值,值存储数组中元素的索引。遍历整个数组,遍历到某一个值nums[i]时,检查散列表m的键中是否有target-nums[i],如果有说明找到了答案,直接返回;如果没有,将nums[i]作为键,i作为值插入到m中即可。
C++代码:
class Solution { public: /** * @param numbers: An array of Integer * @param target: target = numbers[index1] + numbers[index2] * @return: [index1, index2] (index1 < index2) */ vector<int> twoSum(vector<int> &numbers, int target) { // write your code here unordered_map<int,int>m; for(int i=0;i<numbers.size();++i){ if(m.find(target-numbers[i])!=m.cend()) return {m[target-numbers[i]],i}; m.insert({numbers[i],i}); } } };