我是靠谱客的博主 专注香烟,最近开发中收集的这篇文章主要介绍【力扣】706:设计哈希映射 | 数据结构题目描述算法思路,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

不使用任何内建的哈希表库设计一个哈希映射

具体地说,你的设计应该包含以下的功能

put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。
get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。
remove(key):如果映射中存在这个键,删除这个数值对。

注意:所有的值都在 [0, 1000000]的范围内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/design-hashmap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

算法思路

哈希映射的基础就是哈希集合,在【力扣日记】705 设计哈希集合的基础上随便改改就得到哈希映射了。

class MyHashMap(object):

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.keyRange = 769 #确定桶的数量
        self.bucketArray = [Bucket() for i in range(self.keyRange)]

    def _hash(self, key):
        return key % self.keyRange

    def put(self, key,value):
        """
        :type key: int
        :rtype: None
        """
        bucketIndex = self._hash(key)
        self.bucketArray[bucketIndex].insert(key,value)

    def remove(self, key):
        """
        :type key: int
        :rtype: None
        """
        bucketIndex = self._hash(key)
        self.bucketArray[bucketIndex].delete(key)

    def get(self, key):
        """
        Returns true if this set contains the specified element
        :type key: int
        :rtype: bool
        """
        bucketIndex = self._hash(key)
        fg= self.bucketArray[bucketIndex].exists(key)
        if fg==-1:return-1
        return fg.value


class Node:# 链表作为容器
    def __init__(self, key,value=0, nextNode=None):
        self.key=key
        self.value = value
        self.next = nextNode

class Bucket:# 桶的定义
    def __init__(self):
        # a pseudo head
        self.head = Node(0)

    def insert(self, key,newValue):
        # if not existed, add the new element to the head.
        fg=self.exists(key)
        if fg==-1:
            newNode = Node(key,newValue, self.head.next)
            # set the new head.
            self.head.next = newNode
        else:
            fg.value=newValue

    def delete(self, key):
        prev = self.head
        curr = self.head.next
        while curr is not None:
            if curr.key == key:
                # remove the current node
                prev.next = curr.next
                return
            prev = curr
            curr = curr.next

    def exists(self, key):
        curr = self.head.next
        while curr is not None:
            if curr.key == key:
                # value existed already, do nothing
                return curr
            curr = curr.next
        return -1

执行用时 :340 ms, 在所有 Python3 提交中击败了39.80%的用户
内存消耗 :17 MB, 在所有 Python3 提交中击败了100.00%的用户

最后

以上就是专注香烟为你收集整理的【力扣】706:设计哈希映射 | 数据结构题目描述算法思路的全部内容,希望文章能够帮你解决【力扣】706:设计哈希映射 | 数据结构题目描述算法思路所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部