在力扣题解中,我们经常能够看到哈希的身影。今天,让我们一起来探寻哈希的算法思路吧。
目录
一.原理
通俗来说,哈希就是开辟一串空间,给他们分别定上不同的标记,然后把需解决的数据按对应标记放入指定的空间中。只需要检索空间内有无数据,就能依据空间标记来使用对应的数据。
比如有一串数字:3 5 1 6 0 4 2 7 1 3 8 8 1 0 5
最大为8,最小为0,我们可以开辟9个空间,将数据中对应的数字作为下标来寻找指定空间,找到的就让空间值加一。
首先初始化空间值都是0。
值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
然后将数据作为下标进行检索对应空间,检索到的空间值加一。
以 3 为例,那么就是下标为 3 的空间值加一。
值 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
依次将所有数据检索。
值 | 2 | 3 | 1 | 2 | 1 | 2 | 1 | 1 | 2 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
二.解决问题
这样做出来的哈希表能够解决很多的问题。
1.排序
我们通过空间的值就可以清楚排序中有无该数据,该数据有多少。
比如上图中下标为0的空间值为2,就说明数值为0的数据一共有2个。
所以,对于排序而言,我们只需要对照空间值确定数量来依次打印下标即可。
2.数据间的对照检索
有些问题可能需要我们将数据互相对照检索。简单数据还好,如果一旦数据复杂或者对照起来非常麻烦,就极有可能会使问题解决起来异常艰难。这时,用哈希表来解决可能会大大降低解题难度。
这里我们用题来举例,具体思路小编已经为大家写好一篇博客:力扣题解-单词替换
如果哪里不明白可随时私信小编,我会尽全力为大家解答的。
当然,这里再为大家准备一道类似的题目:30. 串联所有单词的子串 - 力扣(LeetCode)
具体的解题思路小编会在之后的博客中更新的。
三.优缺点
哈希表最大的优点就是直观和快速。
哈希的时间复杂度通常为O(n)。
尤其对于排序来说,O(n)的时间复杂度是非常恐怖的。因为快排也只有O(n * log^n)。
但对应的,哈希最大的缺点是空间复杂度高。这取决于数据的范围大小。
所以,哈希是一种用空间来换时间的算法。
生命太短暂,不要去做一些根本没有人想要的东西。——Ash Maurya
如有错误,敬请斧正