LeetCode1-两数之和

如果是有序数组,查找两数之和可以从通过定义两个迭代器从两边进行,这样快一点。但是题目没有说明是有序数组,因此只能逐个比较。题目要求结果不能重复,自然想到了map来处理数据,由于用不到map的有序特性,因此为了追求速度选择unordered_map。将已经遍历的结果插入到unordered_map,在下一个数到达时从unordered_map中寻找满足要求的数,如果存在则返回,否则将此数加入unordered_map。因为返回的是数据序号,因此选择unordered_mapd的格式为<数,序号>。

下面是代码处理,用时12ms。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        unordered_map<int,int> unOdMap;
        unOdMap.insert(pair<int,int>(nums[0],0));
        unordered_map<int,int>::iterator mIter;
        for(int i=1;i<nums.size();i++)
        {
             mIter=unOdMap.find(target-nums[i]);  //查找关键字
            if(mIter!=unOdMap.end()) //找到了两数之和等于target
            {
                result.push_back(mIter->second);  //添加序号
                result.push_back(i);
                break;
            }
            else
            {
                unOdMap.insert(pair<int,int>(nums[i],i));
            }
        }
          return result;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值