码迷,mamicode.com
首页 > 其他好文 > 详细

Two Sum (哈希表)

时间:2015-06-28 17:04:57      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:

思路是循环一次,每次都判断当前数组索引位置的值在不在hashtable里,不在的话,加入进去,key为数值,value为它的索引值;在的话,取得他的key,记为n(此时n一定小于循环变量i),接下来再在hashtable中查找(target-当前数值)这个数,利用了hashtable中查找元素时间为常数的优势,如果找到了就结束,此处需要注意的是,如果数组中有重复的值出现,那么第二次出现时就不会加入到hashtable里了,比如3,4,3,6;target=6时,当循环到第二个3时,也可以得到正确结果。
        最终ac的代码如下:
class Solution {
public:
    vector<int> twoSum(vector<int> &numbers, int target) {
        vector<int > res;
        map<int,int> numMap;
        map<int,int>::iterator iter;
        int len=numbers.size();
        for(int i=0;i<len;i++)
        {
            iter=numMap.find(target-numbers[i]);
            if(iter!=numMap.end())
            {
                res.push_back(iter->second);
                res.push_back(i+1);
                return res;
            }
            else
            {
                numMap[numbers[i]]=i+1;
            }
        }
        
     
    }
};

 

Two Sum (哈希表)

标签:

原文地址:http://www.cnblogs.com/qiaozhoulin/p/4605682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!