C#LeetCode刷题之#706-设计哈希映射(Design HashMap)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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)相关推荐
- Leetcode刷题100天—706. 设计哈希映射(哈希表)—day74
前言: 作者:神的孩子在歌唱 一个算法小菜鸡 大家好,我叫智 706. 设计哈希映射 难度简单248 不使用任何内建的哈希表库设计一个哈希映射(HashMap). 实现 MyHashMap 类: My ...
- 706. 设计哈希映射
链接:706. 设计哈希映射 题解:https://leetcode-cn.com/problems/design-hashmap/solution/xiang-jie-hashmap-de-she- ...
- leetcode 706. 设计哈希映射
不使用任何内建的哈希表库设计一个哈希映射(HashMap). 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象 void put(int key, int value) 向 ...
- 力扣 706. 设计哈希映射
题目 不使用任何内建的哈希表库设计一个哈希映射(HashMap). 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象 void put(int key, int value) ...
- C#LeetCode刷题之#705-设计哈希集合(Design HashSet)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4114 访问. 不使用任何内建的哈希表库设计一个哈希集合 具体地说 ...
- 卷进大厂系列之LeetCode刷题笔记:设计链表(中等)
学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下 ...
- C#LeetCode刷题之#622-设计循环队列(Design Circular Queue)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4126 访问. 设计你的循环队列实现. 循环队列是一种线性数据结构 ...
- C#LeetCode刷题-设计
设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制 33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索树迭 ...
- C#LeetCode刷题-哈希表
哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串 24.2% 中等 18 四数之和 ...
最新文章
- 数据集按类划分_用特别设计的损失处理非均衡数据
- jQuery获取json数据
- python画散点图类型-Pandas / Pyplot中的散点图:如何按类别绘制
- 基于.NET的图表控件解决方案
- 使用StaticLayout实现文字转化为图片的效果(类似发送长微博)
- python网络爬虫系列(十)——chrome在爬虫中的使用
- 数据结构之二叉树的遍历
- java+数组+列举,Java基础-基础语法-数组
- 浅谈Opencl之Image和Buffer 区别
- Jenkins安装部署篇
- Spring: Spring AOP 方面/切面(Aspect)
- Python+OpenCV:理解k近邻(kNN)算法(k-Nearest Neighbour (kNN) algorithm)
- 【每日算法Day 89】手动实现字符串转整数(atoi)函数,你会吗?
- 数据结构详解之向量vector
- 实用网站合集(持续更新ing)
- Vue3快速学习、vue3视频学习、vue3实例上手教程
- html中vid中的id,VID/DID/SVID/SSID
- 我的世界服务器插件文件夹,各位大神服务器没有插件文件夹怎么办
- MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
- 如何关闭微软news