题解 | #两数之和(哈希表)#

两数之和

https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param numbers int整型vector
     * @param target int整型
     * @return int整型vector
     */
    vector<int> twoSum(vector<int>& numbers, int target) {
        vector<int> ret = {};
        map<int, int> m;
        int i, j;
        for (i = 0; i < numbers.size(); i++) {

            auto it = m.find(target - numbers[i]);
            if (it == m.end()) {
                m.insert(pair<int, int>(numbers[i], i));
            } else {
                ret.push_back(m[target - numbers[i]] + 1);
                ret.push_back(i + 1);
            }

        }
        return ret;
    }
};

map容器中的查找时间复杂度为O(1);

map::find(键) 返回的是一个迭代器, 如果没有该键,则返回的迭代器指向map.end();

如果有,返回的迭代器指向该键值对;

it->first; it->second

map插入时,使用对组或者类似于数组的方式插入元素;

  • []运算符:如果使用[]运算符查找一个键,如果该键存在,则返回与该键关联的值;如果该键不存在,则会在std::map中创建一个新的键值对,键为所查找的键,值为默认值(如果键的类型是基本数据类型,则为0,如果是类对象,则调用默认构造函数)。
  • find函数:find函数用于查找特定的键,如果找到了键,则返回一个指向该键对应值的迭代器;如果没有找到,则返回一个指向std::map末尾的迭代器,表示未找到

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务