题目
- 454.四数相加II
- 383.赎金信
- 15.三数之和
- 18.四数之和
454.四数相加II
- 四个array, 所以不用考虑去重
- 用unordered_map
关于umap[sum]初始值
-
umap[sum]访问sum键对应的值,如果sum键不存在,std::unordered_map会自动插入一个新元素,键为sum,值为其默认值(即int类型的默认值 0)。 -
umap[sum]++会先获取sum键对应的值(如果不存在,则值为 0),然后将其值增加 1。 -
换句话说,当
sum这个键第一次被访问时,umap[sum]会被初始化为 0,然后++操作会将其值增加到 1。每次sum被再次访问时,其对应的值都会增加 1。
383.赎金信
- 和之前242.相似
15.三数之和
- 使用哈希法需要去重
- 用双指针更合适, 因为要求和为0
- 记得不能用unordered_set, 要用set
std::set<vector<int>>:可以直接使用,因为vector<int>支持<操作符。std::vector实现了词典顺序的比较,即按顺序逐元素比较。
std::unordered_set<vector<int>>:不能直接使用,因为vector<int>默认没有提供哈希函数。要使用vector<int>作为unordered_set的元素类型,需要提供哈希函数和相等比较函数。
18.四数之和
- 同三数之和, 多一层循环