哈希
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...