【LeetCode】001

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> nums_map;
        for(int i = 0; i < nums.size(); ++i ){
            unordered_map<int, int>::iterator ite = nums_map.find(target - nums[i]);
            if(ite != nums_map.end())
                return {ite->second, i};
            else
                nums_map.insert(unordered_map<int, int>::value_type(nums[i], i));
                
        }
    }
};


int main()
{
    Solution sol;
    vector<int> a;
    for(int m = 0; m<5; m++){
        a.push_back(m);
    }
    vector<int> result1 = sol.twoSum(a, 7);
    for(int k = 0; k < result1.size(); k++){
        cout<<result1[k];
    }
    cout<<endl;
    return 0;
}
 

1.unordered_map使用哈希表,查找(键值)速度比普通map要快;

2.主要思路不是直接创建哈希表,而是先遍历vector中的数值,到哈希表中查找键值为target-num[i]的元素,并返回unordered_map<int, int>::iterator类型或auto(自动识别)的迭代器ite;

3.find的结果是迭代器,而我们需要的是迭代器指向的元素的second成员,即值;

4.找不到则以num[i]为键,i为值添加到哈希表中等待被检索,被insert的应该是pair<int, mint>类型的,或者干脆写unordered_map<int, int>::value_tpe型;

5.map不能被修改,因为map是有序的,打乱后就不正常了,因此需要使用insert,不过一开始哈希表是空白的,也可以使用nums_map[num[i]] = [i]进行赋值;

6.vector除了使用循环语句还有更高效的输出的方法么?

猜你喜欢

转载自blog.csdn.net/weixin_39458342/article/details/84196241