lintcode-56. Two Sum

欢迎访问我的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});
        }
    }
};


猜你喜欢

转载自blog.csdn.net/richenyunqi/article/details/80691118