zoukankan      html  css  js  c++  java
  • leetcode 数据结构 探索哈希表

    1、哈希表:哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。通过选择合适的哈希函数,哈希表可以在插入和搜索方面实现出色的性能。

                        哈希表的关键思想是使用哈希函数将键映射到存储桶

    (1)哈希集合:集合数据结构的实现之一,用于存储非重复值。

    (2)哈希映射:映射 数据结构的实现之一,用于存储(key, value)键值对。

        哈希函数: y = x%5  (x是键值,y是桶的索引)  

        插入:通过哈希函数解析键,将它们映射到相应的桶中。

        搜索:通过相同的哈希函数解析键,并仅在特定存储桶中搜索。

    2、哈希集合的操作:add(value):向哈希集合中插入一个值;

                remove(value):将给定值从哈希集合中删除。

    3、哈希映射的操作:   get(key):返回给定的键所对应的值,如果映射中不包含这个键,  返回None。

                                       remove(key):如果映射中存在这个键,删除这个数值对。

                                        

     练习题:(1)快乐数:

    def ishappy(n):
        hashset = set()
        while True:
            n = sum([int(i)**2 for i in str(n)])
            if n==1:
                return True
            elif n in hashset:
                return False
            else:
                hashset.add(n)
                
    n = 19
    print(ishappy(n))

           (2)词频计数

    from collections import Counter
    def f(s):
        c = Counter( )
        for char in s:
            c[char] +=1
        return dict(c)
    
    s = "aabbc"
    print(f(s)
    def f(s):
        dic ={}
        for char in s:
            if dic.get(char)==None:
                dic[char]=1
            else:
                dic[char] +=1
        return dic
    
    s = "aabbc"
    print(f(s))

     (3)字符串无重复最长子串。

    def f(s):
        dic = {}
        left = -1
        temp = 0
        for right in range(len(s)):
            if s[right] in dic:
                left = max(dic[s[right]],left)
            temp = max(temp, right-left)
            dic[s[right]] = right
        return temp
    
    
    
    s = "abcabcbb"
    print(f(s))
    def f(s):
        hashset = set()
        n = len(s)
        #初始化右指针
        right = -1
        res = 0
        for left in range(n):
            if left !=0:
                #左指针移动一格,移除一个字符
                hashset.remove(s[left-1])
                
            while right+1<n and s[right+1] not in hashset:
                hashset.add(s[right+1])
                right +=1
    
            res = max(res, right-left+1)
        return res
    
    
    s = "abcabcbb"
    print(f(s))
  • 相关阅读:
    ASP.NET和PHP全面对比
    GridView事件DataBinding,DataBound,RowCreated,RowDataBound区别及执行顺序分析
    OA、CRM、ERP之间的区别和联系是什么?
    C#继承
    对软件项目管理的几点认识
    冒泡
    经典排序算法
    asp.net遍历页面中所有TextBox,并赋值为String.Empty的方法
    String.Format用法
    frame和iframe
  • 原文地址:https://www.cnblogs.com/yijierui/p/13179384.html
Copyright © 2011-2022 走看看