-
两类查找问题.
- 查找有无:元素’a’是否存在? 使用 set:集合,不会有重复值
- 查找对应关系(键值对应):元素’a’出现了几次? 使用 map: 字典,字典是一一映射的
-
在查找问题中,数组的有序性非常重要,使用二分查找可以更快,使用查找表方法时一定要想清楚到底要查找什么,键和值分别是什么。
-
set 和 map
-
通常语言的标准库中都内置 set 和 map ,通常被称为容器类,容器类屏蔽实现细节,所以要了解语言中标准库里常见容器类的使用
-
set 和 map 常见操作:
- insert,添加
- find,查找
- erase,删除
- change (map),改变
-
set 和 map 不同底层实现的时间复杂度
普通数组实现 顺序数组实现 二分搜索树(平衡) 哈希表 插入 O(1) O(n) O(logn) O(1) 查找 O(n) O(logn) O(logn) O(1) 删除 O(n) O(n) O(logn) O(1)
-
-
数据的顺序性,如二分搜索树可以轻易实现以下操作
- 数据集中的最大值和最小值
- 某个元素的前驱利后继
- 某个元素的floor和ceil
- 某个元素的排位rank
- 选择某个排位的元素select
-
哈希表的缺点是失去了数据的顺序性
-
判断字符串t是否是字符串s变换字符顺序后得到的结果
- 空串处理?
- 字符集定义?
-
给出一个模式(pattern) 以及一个字符串,判断这个字符串是否符合模式?
- 字符集定义?
- 空串符合任意模式?还是不符合任意模式?
-
判断两个字符串是否同构?如果我们能够寻找到一个字符集到字符集的映射,使得通过这个字符集的映射,s可以转变为t,则称为s和t同构。
- 字符集定义?
- 空串?
- 是否可以一个字母映射到自己?
-
给出一个整型数组nums,返回这个数组中两个数字的索引值i和j,使得nums[i] + nums[j]等于一个给定的target值
- 索引从0开始计算还是从1开始计算?
- 没有解怎么办?
- 保证有唯一解吗?有多个解怎么办?
-
给出一个整形数组,寻找其中的所有不同的三元组(a,b,c),使得a+b+c=0,如nums=[-1,0, 1,2,-1,-4],结果为[[-1,0, 1],[-1,-1,2]]
- 不同的三元组?考虑排列组合吗?
- 如果有多个解,解的顺序?
- 如果没有解?
-
给出一个整形数组,寻找其中的三个元素a,b,c,使得a+b+c的值最接近另外一个给定的数字target
- 如果有多个解,其和target值的接近程度一样怎么办?
- 如果没解? (可不可能没解? )
-
给出一个字符串数组,将其中所有可以通过颠倒字符顺序产生相同结果的单词进行分组。
- 字符集定义?
- 大小写敏感?
-
给出2D平面上的n个点,求出最多有多少个点在一条直线上?
- 点坐标的范围
- 点坐标的表示(整数?浮点数?浮点误差? )
-
注意整型溢出的问题
-
经典例题
- LeetCode 第 349 题:两个数组的交集 ,set
- LeetCode 第 350 题:两个数组的交集 II,map
- LeetCode 第 242 题:有效的字母异位词
- LeetCode 第 202 题:快乐数
- LeetCode 第 290 题:单词规律
- LeetCode 第 205 题:同构字符串
- LeetCode 第 451 题:根据字符出现频率排序
- LeetCode 第 1 题:两数之和
- LeetCode 第 15 题:三数之和
- LeetCode 第 18 题:四数之和,灵活选择键值
- LeetCode 第 16 题:最接近的三数之和
- LeetCode 第 454 题:和为K的子数组
- LeetCode 第 49 题:字母异位词分组
- LeetCode 第 447 题:回旋镖的数量,灵活选择键值
- LeetCode 第 149 题:直线上最多的点数
- LeetCode 第 219 题:存在重复元素 II,滑动窗口+查找表
- LeetCode 第 217 题:存在重复元素
- LeetCode 第 220 题:存在重复元素 III,二分搜索树底层实现的顺序性
【玩转算法】查找
最新推荐文章于 2025-03-17 19:56:37 发布
1594

被折叠的 条评论
为什么被折叠?



