【算法06天:Day6】第三章哈希表 LeetCode 两数之和(1)有人相爱,有人夜里开车看海,有人 leetcode 第一题都做不出来。

68 阅读2分钟

题目一:

image.png

解法一:(暴力方法)

解题思路:两个for循环,第一个for循环控制第一个数,第二个for循环控制第二个数,注意返回的是下标数组。

image.png

解法二:(Map)

解题思路:当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

本题中,我们就需要一个集合来存放我们遍历过的元素,然后遍历数组的时候去询问这个集合,某元素是否遍历过,也就是是否出现在这个集合。由于我们不仅要知道元素是否遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key存放元素,value存放下标,因此map正好合适。而set只能存放value,不太方便进行处理。

image.png

image.png

总结:

Map()函数使用方法

1. m.size 用来获取 key 的个数。
2. m.has(key) 判断key是否存在
3. m.get(key) 取值,如果没有这个key就返回undefined
4. m.set(key, value),设值,返回m
5. m.delete(key) 如果key存在且已经被删除了返回true,如果key不存在就返回false
6. m.clear() 删除所有键值对
7. m.keys() 返回一个iterable对象,其中包含了按插入顺序迭代的所有key
8. m.values() 返回一个iterable对象,其中包含了按插入顺序迭代的所有value
9. m.entries() 返回一个iterable独享,每一个元素是[key, value],遍历顺序按key的插入顺序

Set()函数使用方法

1. s.set 用来获取元素的个数
2. s.add()添加元素
3. s.has() 查询Set实例是否存在某元素(返回布尔值)
4. s.delete() 删除Set实例中某个元素(返回布尔值)
5. s.clear() 清空Set实例
6. s.keys 返回键名
7. s.values 返回键值 注意:Set中 键名 === 键值
8. s.entries() 返回键值对 如[[1, 1], [2, 2], [3, 3]]
9. for-of: for (const i of s)  forEach: s.forEach((value, key) => console.log(key + ' : ' + value))