LeetCode题库练习之两数之和

题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

使用查找表来解决该问题。

设置一个 map 容器 record 用来记录元素的值与索引,然后遍历数组 nums。

每次遍历时使用临时变量 complement 用来保存目标值与当前值的差值。
在此次遍历中查找 record,查看是否有与 complement 一致的值,如果查找成功则返回查找值的索引值与当前变量的值 i。
如果未找到,则在 record 保存该元素与索引值 i。

public:
    vector<int> twoSum(vector<int>& nums, int target) {

        vector<int>vec;
        unordered_map<int,int> record;
        for(int i = 0 ; i < nums.size() ; i ++){
       
            int complement = target - nums[i];
            if(record.find(complement) != record.end()){
                int res[] = {i, record[complement]};
                return vector<int>(res, res + 2);
            }

            record[nums[i]] = i;
        }
        return vec;
    }
};

关于本题涉及到的map容器知识点
map是键-值对的集合。map类型通常可理解为关联数组:可使用键作为下标来获取一个值,正如内置数组类型一样。而关联的本质在于元素的值与某个特定的键相关联,而并非通过元素在数组中的位置来获取。
包含map的头文件
#include<map>
定义map对象
map<string,int>word_count
定义了一个名为word_count的对象,由string类型的键索引,关联的值为int类型。
word_count["Anna"]=1
在word_count中查找键为Anna的元素,没有找到。
将新的键-值插入到word_count中。并初始化值为0。
读取新插入的元素,并赋值为1.
注意:若map容器中没有这个元素时,将会自动创建一个新的元素,与vector不同。

查找读取map中的元素
word_count.count()查询一个键是否存在,并返回0或1.
word_count.find()返回指向元素的迭代器,如果元素不存在,则返回end迭代器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值