返回

哈希表难题重现江湖:头条前端进阶算法 8

前端

哈希表是一种非常有效的数据结构,在很多领域都有着广泛的应用,例如在数据库、缓存和编译器中。哈希表与数组不同,数组中的数据是顺序存储的,而哈希表中的数据是通过哈希函数映射到不同的位置存储的。这使得哈希表可以非常快速地查找和插入数据,时间复杂度为O(1),而数组查找和插入数据的时间复杂度为O(n)。

头条前端进阶算法8中,给出了一个哈希表问题。该问题要求您实现一个哈希表,并支持以下操作:

  • 插入一个键值对
  • 删除一个键值对
  • 查找一个键值对
  • 返回哈希表中所有的键值对

您需要使用Python语言实现该哈希表。

class HashTable:
    def __init__(self):
        self.table = [[] for _ in range(1000)]

    def insert(self, key, value):
        hash_key = hash(key) % len(self.table)
        self.table[hash_key].append((key, value))

    def delete(self, key):
        hash_key = hash(key) % len(self.table)
        for i, (k, v) in enumerate(self.table[hash_key]):
            if k == key:
                del self.table[hash_key][i]
                return

    def find(self, key):
        hash_key = hash(key) % len(self.table)
        for k, v in self.table[hash_key]:
            if k == key:
                return v
        return None

    def items(self):
        for bucket in self.table:
            for key, value in bucket:
                yield key, value


if __name__ == "__main__":
    hash_table = HashTable()
    hash_table.insert("name", "John")
    hash_table.insert("age", 20)
    hash_table.insert("city", "New York")

    print(hash_table.find("name"))  # John
    print(hash_table.find("age"))  # 20
    print(hash_table.find("city"))  # New York

    hash_table.delete("age")

    print(hash_table.find("age"))  # None

    for key, value in hash_table.items():
        print(key, value)

除了哈希表,数据结构还包括链表、栈、队列、树、图等。每种数据结构都有其独特的性质和应用场景。作为一名程序员,掌握各种数据结构并熟练应用它们,对提升编程能力至关重要。