001 两数之和

官方答案2

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

思路:
和常规方法一样,还是通过查找target-nums[i]寻找下表,但是用建立哈希表替代遍历。

  1. unordered_map
    根据hash值判断元素是否相同,内部元素无序,需要建立哈希表;
    它的键值分别是迭代器的first和second属性;
    成员函数find(key) 通过给定主键查找元素,没找到:返回unordered_map::end(迭代器);
    https://www.cnblogs.com/langyao/p/8823092.html

  2. auto
    auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,类似的关键字还有decltype。但在真正编程的时候也不建议这样来使用auto,直接写出变量的类型更加清晰易懂。
    1.用于代替冗长复杂、变量使用范围专一的变量声明。
    2.在定义模板函数时,用于声明依赖模板参数的变量类型。
    3.模板函数依赖于模板参数的返回值
    auto 变量必须在定义时初始化,这类似于const关键字。
    自动推导规则:
    1.如果初始化表达式是引用,则去除引用语义。
    2.如果初始化表达式为const或volatile(或者两者兼有),则除去const/volatile语义。
    3.如果auto关键字带上&号,则不去除const语意。
    4.初始化表达式为数组时,auto关键字推导类型为指针。
    5.若表达式为数组且auto带上&,则推导类型为数组类型。
    6.函数或者模板参数不能被声明为auto
    auto仅仅是一个占位符,它并不是一个真正的类型,不能使用一些以类型为操作数的操作符,如sizeof或者typeid。
    https://www.cnblogs.com/QG-whz/p/4951177.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CPP 1、在main执行之前和之后执行的代码可能是什么? main函数执行之前,主要就是初始化系统相关资源: 设...
    voidFan阅读 1,770评论 1 6
  • 这篇文章以《C++ Primer》(第五版)为基础,结合自己的理解,将C++11的新特性加以总结、概括,以加深印象...
    toMyLord阅读 890评论 2 6
  • C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意...
    cjhfhb阅读 267评论 0 0
  • 一、C语言基础 1、struct 的内存对齐和填充问题其实只要记住一个概念和三个原则就可以了: 一个概念:自然对齐...
    XDgbh阅读 2,248评论 1 38
  • [Toc] 类 构造函数 参考资料:https://blog.csdn.net/qq_39597358/artic...
    Catherin_gao阅读 254评论 0 0