哈希算法(散列算法)简单运用

哈希算法(散列算法)

今天在做LeetCode的时候做到第三题,不包含重复字符的子字符串的最大长度,深刻意识到散列查找的快速性。

核心思想:用空间换时间

哈希算法的核心思想就是用空间复杂度来换取时间复杂度,简单来说,一般的查找都需要通过遍历整个数据结构来找到你所想要的值,而哈希算法先将你所想查找的关键字存储在特定的地方,你可以通过关键字直接找到他,而不需要去遍历整个数据。大部分哈希查找的时间复杂度都在是0(n)。

代码例子

这里直接贴两个简单的代码例子
第一个是最基础的TwoSum。


    vector twoSum(vector& nums, int target) {
        int n = nums.size();
        vector rev;
        map m;
        for(int i = 0;i

可以看到这里用map容器建立了一个简单的哈希表。
第二个就是难住我的第三题了:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int rev = 0,left = 0;
        int n = s.size();
        int m[256] = {0};
        for(int i = 0; i

简单很多,不过有点难理解,这里直接用数组建立一个简单的哈希表,形成了一个滑动窗口的检索字符串方式,正常暴力搜索下需要三次的时间复杂度才能完成。

c++中

c++中主要可以通过map和set容器进行哈希表的建立,原理是key-value的对应。

总结

这里只是哈希表的简单用法,链式构建哈希表的方法以后有机会再补上吧,很强大的数据结构,需要灵活运用。

你可能感兴趣的:(Leetcode反思)