问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4116 访问。

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

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

put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。
get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。
remove(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]范围内。
不要使用内建的哈希库。


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

To be specific, your design should include these two 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);            // returns 1

hashMap.get(3);            // returns -1 (not found)

hashMap.put(2, 1);          // update the existing value

hashMap.get(2);            // returns 1

hashMap.remove(2);          // remove the mapping for 2

hashMap.get(2);            // returns -1 (not found)

Note:

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


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4116 访问。

public class Program {public static void Main(string[] args) {var hashMap = new MyHashMap();hashMap.Put(1, 1);hashMap.Put(2, 2);hashMap.Get(1);hashMap.Get(3);hashMap.Put(2, 1);hashMap.Get(2);hashMap.Remove(2);hashMap.Get(2);Console.ReadKey();}public class MyHashMap {private int[] buckets;public MyHashMap() {buckets = new int[1000000];for(var i = 0; i < buckets.Length; i++) {buckets[i] = -1;}}private int GetHashCode(int key) {//用本身值作为散列值return key;}public void Put(int key, int value) {buckets[GetHashCode(key)] = value;}public int Get(int key) {var res = buckets[GetHashCode(key)];Console.WriteLine(res);return res;}public void Remove(int key) {buckets[GetHashCode(key)] = -1;}}}

以上给出1种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4116 访问。

1
-1
1
-1

分析:

注意该题的测试用例中包含值为0的项目,并不是题目中[1, 1000000]的范围内。所以很无奈的在构造函数中初始化所有值为-1。

显而易见,MyHashMap解法中的Put、Get和Remove三个方法均为  的常量时间复杂度。

C#LeetCode刷题之#706-设计哈希映射(Design HashMap)相关推荐

  1. Leetcode刷题100天—706. 设计哈希映射(哈希表)—day74

    前言: 作者:神的孩子在歌唱 一个算法小菜鸡 大家好,我叫智 706. 设计哈希映射 难度简单248 不使用任何内建的哈希表库设计一个哈希映射(HashMap). 实现 MyHashMap 类: My ...

  2. 706. 设计哈希映射

    链接:706. 设计哈希映射 题解:https://leetcode-cn.com/problems/design-hashmap/solution/xiang-jie-hashmap-de-she- ...

  3. leetcode 706. 设计哈希映射

    不使用任何内建的哈希表库设计一个哈希映射(HashMap). 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象 void put(int key, int value) 向 ...

  4. 力扣 706. 设计哈希映射

    题目 不使用任何内建的哈希表库设计一个哈希映射(HashMap). 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象 void put(int key, int value) ...

  5. C#LeetCode刷题之#705-设计哈希集合​​​​​​​(Design HashSet)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4114 访问. 不使用任何内建的哈希表库设计一个哈希集合 具体地说 ...

  6. 卷进大厂系列之LeetCode刷题笔记:设计链表(中等)

    学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下 ...

  7. C#LeetCode刷题之#622-设计循环队列​​​​​​​(Design Circular Queue)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4126 访问. 设计你的循环队列实现. 循环队列是一种线性数据结构 ...

  8. C#LeetCode刷题-设计

    设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制 33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索树迭 ...

  9. C#LeetCode刷题-哈希表

    哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串   24.2% 中等 18 四数之和   ...

最新文章

  1. 数据集按类划分_用特别设计的损失处理非均衡数据
  2. jQuery获取json数据
  3. python画散点图类型-Pandas / Pyplot中的散点图:如何按类别绘制
  4. 基于.NET的图表控件解决方案
  5. 使用StaticLayout实现文字转化为图片的效果(类似发送长微博)
  6. python网络爬虫系列(十)——chrome在爬虫中的使用
  7. 数据结构之二叉树的遍历
  8. java+数组+列举,Java基础-基础语法-数组
  9. 浅谈Opencl之Image和Buffer 区别
  10. Jenkins安装部署篇
  11. Spring: Spring AOP 方面/切面(Aspect)
  12. Python+OpenCV:理解k近邻(kNN)算法(k-Nearest Neighbour (kNN) algorithm)
  13. 【每日算法Day 89】手动实现字符串转整数(atoi)函数,你会吗?
  14. 数据结构详解之向量vector
  15. 实用网站合集(持续更新ing)
  16. Vue3快速学习、vue3视频学习、vue3实例上手教程
  17. html中vid中的id,VID/DID/SVID/SSID
  18. 我的世界服务器插件文件夹,各位大神服务器没有插件文件夹怎么办
  19. MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
  20. 如何关闭微软news

热门文章

  1. LeetCode 383. Ransom Note
  2. 【GPU编程】开始Cg之旅,编译自己的第一个Cg程序
  3. 字节缓冲流 BufferedInputStream java
  4. 控件进阶 编辑学生的窗体
  5. 环境变量的配置windows10系统
  6. 26.课时26.【Django模版】if标签使用详解(Av61533158,P26)
  7. 0227网页提取技术
  8. 04-mysql常见命令,语法规范,
  9. dj电商-模型类设计-1.x-模型类抽象基类
  10. django-删除学生数据