哈希

type
Post
status
Published
date
Apr 20, 2026
slug
example-4
summary
tags
力扣
category
笔记
icon
password
一、两数之和
首先想到的是遍历的暴力解法
  • nums.empty():探查军情,返回布尔值。如果数组空无一人,返回 true。这比写 nums.size() == 0 执行起来更利索。
  • nums.push_back(val):招兵买马。在数组的最末尾塞入一个新的元素 val
  • nums.pop_back():裁撤老兵。把数组最末尾的元素踢出去。
  • nums.back() / nums.front():直接揪出排在队伍最尾巴 / 最前头的那个元素。
使用哈希表的题解如下:
哈希表叫做 unordered_map(无序映射表),查找的时间复杂度为O(1)。创建时的<int, int>叫做键值对(Key-Value Pair),
  • 第一个 int(Key,键):用来查找的线索。在这道题里,它记录的是具体数字(nums[i]
  • 第二个 int(Value,值):线索背后的具体信息。在这道题里,它记录的是这个数字所在的位置(索引 i
1.hashtable.find(key)
它不会简单地回答“在”或“不在”,而是直接把key位置(迭代器/指针)带回来。
如果找不到,它就会返回 hashtable.end()代码里常写 if (it != hashtable.end())
  • it->first:就是刚才找的线索(Key,键)。
  • it->second:就是线索背后藏着的具体信息(Value,值)。在“两数之和”里,这就是我们需要的位置索引。
2.hashtable.count(key)
只会返回1(存在)或0(不存在)
3.hashtable.contains(key)
会返回false和true
4.hashtable[key]
当您写出 hashtable[key] 时,它会先去查有没有这个 key
  • 如果有:直接把那个 key 对应的 value 拿出来给您用。
  • 如果没有:它会自作主张,当场新建一页,写上这个 key,并赋予一个默认值(比如 0),然后再交给您。
5.hashtable.erase(key)
删除key这个数。
auto为自动类型推导,将it的类型自动认定。
哈希表以空间换时间,时间复杂度和空间复杂度都为O(N)。
碎碎念:力扣上刷的第一道题,以前用的一直是acm格式。
 
二、字母异位词分组
排序
关于sort:默认为按照a-z的顺序排列,如果想倒序排列,可使用greater函数,如下所示:
省去了用 if...else 去判断是否存在的繁琐
emplace_back直接传递参数,就地构造

计数

将每个字母出现的顺序用字符串表示,作为哈希表的键
 
Loading...

© 王做 2026