C++ undered_map哈希表用法——leetcode两数之和

undered_map

头文件:#include<undered_map>

创建表undered_map<key,value> Map_name;

插入元素

  • a[key]=value;
  • Map_name.insert(pair<int,int>(key,value));
  • unordered_map<int,int>Map_name={{key1,value1},{key2,value2}};

查找键值 table_name.find(key)

当已经存在键值的情况返回 end()

创建迭代器 unordered_map<key,value>::iterator iterator_name;

用迭代器访问元素的键值 it->first

用迭代器访问元素的键值对应的元素值 it->second

两数之和

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

/*
 * @lc app=leetcode.cn id=1 lang=cpp
 *
 * [1] 两数之和
 */

// @lc code=start

#include<vector>
#include<iostream>
#include<unordered_map>
using namespace std;


class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hashtable;//提供一对一的hash
        
        for(int i= 0;i<nums.size();i++)//++i
        {
            auto it = hashtable.find(target-nums[i]);
            if(it!=hashtable.end()){
                return {it->second,i};
            }
            hashtable[nums[i]]=i;
        }
        return {};

    }
};
// @lc code=end

posted @ 2021-02-01 11:56  叶梓渔  阅读(473)  评论(0)    收藏  举报