leetcode 1. 两数之和

 在本题如果使用map方法的话,需要想清楚几个问题

例:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]

1.为什么用哈希法?

哈希法的目的是为了查找某一元素是否出现过。本题在遍历数组的时候,例如当遍历到 2 时,我们想知道是否出现过 与 2 的合是target的数字。所以就可以想到哈希法

2.为什么用map?

我们想知道是否出现过 能与当前遍历的数 的合 是 target。返回的时,数,和这个数的下标。这就是一对键值对。用map保存下来。

3.为什么使用unordered_map?

我们不需要其中的元素有序,也不需要让元素多次存在。unordered_map 查询删改效率最高!

4. map 中的key应该设置为 什么?

我们需要寻找的是元素,元素的值!不是元素的下标,所以自然让key存放的是元素的值。

5.map的作用?

就是存放已经出现过的值。

整题的步骤:

遍历数组,每遍历一个元素,就去map里查找是否出现过 可以与该元素相加 合为 target的值。如果有,则返回。如果没有,则将该元素插入。

学习到的:

1.如何定义一个map : unordered_map<int,int> map;

2.如果查询到了,返回的是迭代器,指向该元素。it->second 取下标

3.如何插入一个元素到map中? map.insert(pair<int,int>(nums[i] , i));

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> map;
        for(int i = 0; i < nums.size(); i++)
        {
            int s = target - nums[i];
            if(map.find(s) != map.end())
            {
                auto it = map.find(s);
                return {it->second, i };
            }
            else
            {
                map.insert(pair<int, int>(nums[i], i)); 
            }
        }
        return {0,0};
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值