706. Design HashMap 实现哈希表
[抄题]:
public MyHashMap() {
主函数里面是装非final变量的,如果没有,可以一个字都不写
}
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
put: 不论如何都要放。所以如果没有bucket,就要new一个对象出来:
if (buckets[i] == null)
buckets[i] = new Bucket();
get:没有就返回-1
remove:没有就直接return
[思维问题]:
[英文数据结构或算法,为什么不用别的数据结构或算法]:
Bucket类都用final变量,表示容量恒定不变
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
找上一个的bucket[index] ,根据上一个来找下一个:
[一刷]:
- ListNode类中包括ListNode方法
- find函数也是返回前一个prev节点
[二刷]:
- find函数查找的是key,不是value
[三刷]:
- 后面三个函数都要调用find函数啊,不然find干嘛的
- 都要考虑prev.next不存在的情况
[四刷]:
- bucket是一个链表,find(Bucket bucket, int key)要在该链表中查找,而不是数组中
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
Bucket是一个链表,根据上一个节点来找下一个
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[算法思想:迭代/递归/分治/贪心]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
class MyHashMap { /** Initialize your data structure here. */
public MyHashMap() { } //ini: class ListNode, class bucket
class ListNode {
int key, val;
ListNode next; ListNode(int key, int val) {
this.key = key;
this.val = val;
}
} class Bucket {
final ListNode head = new ListNode(-1, -1);
} final Bucket[] buckets = new Bucket[10000000]; //method find, shuld function just as the normal find
ListNode find(Bucket buckets, int key) {
ListNode prev = null; ListNode cur = buckets.head;
//while loop
while (cur != null && cur.key != key) {
prev = cur;
cur = cur.next;
} return prev;
} //method getIdx
int getIdx(int key) {
return Integer.hashCode(key) % buckets.length;
} /** value will always be non-negative. */
public void put(int key, int value) {
int i = getIdx(key);
//cc
if (buckets[i] == null)
buckets[i] = new Bucket();
ListNode prev = find(buckets[i], key);
//the bucket's next is null or not
if (prev.next == null) {
prev.next = new ListNode(key, value);
}else {
prev.next.val = value;
}
} /** 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) {
int i = getIdx(key);
//cc
if (buckets[i] == null) return -1;
ListNode prev = find(buckets[i], key);
return prev.next == null ? -1 : prev.next.val;
} /** Removes the mapping of the specified value key if this map contains a mapping for the key */
public void remove(int key) {
int i = getIdx(key);
//cc
if (buckets[i] == null) return ;
ListNode prev = find(buckets[i], key);
if (prev.next == null) return;
prev.next = prev.next.next;
}
} /**
* Your MyHashMap object will be instantiated and called as such:
* MyHashMap obj = new MyHashMap();
* obj.put(key,value);
* int param_2 = obj.get(key);
* obj.remove(key);
*/
[潜台词] :
706. Design HashMap 实现哈希表的更多相关文章
- LeetCode 706. Design HashMap (设计哈希映射)
题目标签:HashMap 题目让我们设计一个 hashmap, 有put, get, remove 功能. 建立一个 int array, index 是key, 值是 value,具体看code. ...
- 706. Design HashMap - LeetCode
Question 706. Design HashMap Solution 题目大意:构造一个hashmap 思路:讨个巧,只要求key是int,哈希函数选择f(x)=x,规定key最大为100000 ...
- 【Leetcode_easy】706. Design HashMap
problem 706. Design HashMap solution1: class MyHashMap { public: /** Initialize your data structure ...
- Leetcode PHP题解--D75 706. Design HashMap
2019独角兽企业重金招聘Python工程师标准>>> D75 706. Design HashMap 题目链接 706. Design HashMap 题目分析 自行设计一个has ...
- HashMap分析 + 哈希表
http://www.cnblogs.com/hzmark/archive/2012/12/24/HashMap.html http://www.cnblogs.com/xqzt/archive/20 ...
- Leetcode706.Design HashMap设计哈希映射
不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对.如果键对应的值已经存在,更新这个值. get(key ...
- [leetcode] 706. Design HashMap
题目 Design a HashMap without using any built-in hash table libraries. Implement the MyHashMap class: ...
- LeetCode 706 Design HashMap 解题报告
题目要求 Design a HashMap without using any built-in hash table libraries. To be specific, your design s ...
- [LeetCode&Python] Problem 706. Design HashMap
Design a HashMap without using any built-in hash table libraries. To be specific, your design should ...
随机推荐
- ILBC 规范
本文是 VMBC / D# 项目 的 系列文章, 有关 VMBC / D# , 见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>) https://w ...
- 如何在同一主机中添加多个homestead并行开发
参考源 https://blog.csdn.net/smm188/article/details/79356150 1,在项目目录 git clone homestead 后(见上面流程中的第四步), ...
- access十万级数据分页
最近的一个项目采用winform+access,但后来发现客户那边的数据量比较大,有数十万条数据.用sql语句进行分页,每次翻页加载都需要8秒钟左右,实在难以忍受. 后来百度了一下,发现一篇文章我的A ...
- Linux和Windows启动后台程序
平时很多时候,我们需要通过脚本命令调用执行程序,集成一体后方便使用快捷.但是启动脚本窗口比较碍眼,能设置为后台运行既方便又美观. Linux启动后台程序 1.后台执行 nohup方法:不挂断的运行命令 ...
- [java,2018-02-24] svn检出项目名称不正确
,今天从svn中检出项目时发现,检出项目的名称与实际的不相同,如下图: 这才想起来,当时创建项目时是随意起了个test的名称作为项目名,后来觉得能用,就在me中直接把项目名称改掉,提交到了svn.再从 ...
- 在HTML中显示base64 img 图片
base64的图片可以直接显示在网页上面 <img src=“data:image/png;base64,******************************************** ...
- Maven CXF wsdl2Java 给指定名空间设置包名
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin< ...
- Linux操作系统监控分析
性能分析点:1. 负载机2.网络传输3.硬件4.应用程序线程池5.数据库连接池6.代码业务逻辑7.数据库sql执行时间8.jvm(GC) 操作系统硬件:cpu:计算.逻辑处理:CPU的颗粒数越多,CP ...
- PHP安装Commposer
一先把php加到环境变量里面测试 看一下版本号: 二,composer得安装注意安装的时候 php必须在5.59以上版本,openssl的扩展开启,pdo的扩展开启,mbstring的扩展开启 1,下 ...
- maven构建SSM框架中pom.xml文件配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...