题解 | #两数之和(哈希表)#
两数之和
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
末尾的迭代器,表示未找到