• LeetCode 706:设计哈希映射 Design HashMap


    题目:

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

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

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

    Design a HashMap without using any built-in hash table libraries.

    To be specific, your design should include these functions:

    • put(key, value) : Insert a (key, value) pair into the HashMap. If the value already exists in the HashMap, update the value.
    • get(key): Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key.
    • remove(key) : Remove the mapping for the value key if this map contains the mapping for the key.

    示例:

    MyHashMap hashMap = new MyHashMap();
    hashMap.put(1, 1);          
    hashMap.put(2, 2);         
    hashMap.get(1);            // 返回 1
    hashMap.get(3);            // 返回 -1 (未找到)
    hashMap.put(2, 1);         // 更新已有的值
    hashMap.get(2);            // 返回 1 
    hashMap.remove(2);         // 删除键为2的数据
    hashMap.get(2);            // 返回 -1 (未找到) 
    

    注意:

    • 所有的值都在 [1, 1000000]的范围内。
    • 操作的总数目在[1, 10000]范围内。
    • 不要使用内建的哈希库。

    Note:

    • All keys and values will be in the range of [0, 1000000].
    • The number of operations will be in the range of [1, 10000].
    • Please do not use the built-in HashMap library.

    解题思路:

    ​ 与设计哈希集合一题相似,只需要将布尔类型数组改成 int 整型数组,元素索引位置为Key值,元素值为Value值。

    ​ 题目中要求Key不存在时返回 -1 ,Python中可以直接初始化值为 -1 的长度为 1000001 的数组,直接返回 Value值即可。其他语言初始化数组后元素值默认为0,可以遍历一遍把值改为 -1,或存储值为真实值加 1,返回 Value - 1,如果 Key 不存在时 Value 为 0,返回 Value - 1 = -1,符合要求。

    代码:

    Java:

    class MyHashMap {
        private int[] hashMap;
        /** Initialize your data structure here. */
        public MyHashMap() {
            this.hashMap=new int[1000001];
        }
    
        /** value will always be non-negative. */
        public void put(int key, int value) {
            hashMap[key] = value+1;//存储真实值加 1
        }
    
        /** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
        public int get(int key) {
            return hashMap[key] - 1;//返回存储值为 -1 得到真实值
        }
    
        /** Removes the mapping of the specified value key if this map contains a mapping for the key */
        public void remove(int key) {
            hashMap[key] = 0;
        }
    }
    

    Python:

    class MyHashMap:
    
        def __init__(self):
            """
            Initialize your data structure here.
            """
            self.hash_table = [-1]*1000001
    
        def put(self, key: int, value: int) -> None:
            """
            value will always be non-negative.
            """
            self.hash_table[key] = value
    
        def get(self, key: int) -> int:
            """
            Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key
            """
            return self.hash_table[key]#直接返回Value
    
        def remove(self, key: int) -> None:
            """
            Removes the mapping of the specified value key if this map contains a mapping for the key
            """
            self.hash_table[key] = -1
    

    欢迎关注微.信公.众号:爱写Bug
    在这里插入图片描述

  • 相关阅读:
    Linux下让一个程序开机自动启动
    Heartbeat高可用解决方案
    NFS文件共享
    清除系统日志的三个脚本
    nfs+rsync+inotify实现文件的实时同步
    安装配置rsync服务端
    shell中如何进行算术运算
    linux下查看账号密码的过期时间和设置时间
    配置Nginx作为web server详解
    [LeetCode] 398. Random Pick Index ☆☆☆
  • 原文地址:https://www.cnblogs.com/zhangzhe532/p/11587266.html
Copyright © 2020-2023  润新知