当前位置:网站首页>golang刷leetcode 经典(6) 实现跳表
golang刷leetcode 经典(6) 实现跳表
2022-08-02 17:37:00 【用户9710217】
不使用任何内建的哈希表库设计一个哈希映射
具体地说,你的设计应该包含以下的功能
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]范围内。
不要使用内建的哈希库。
解题思路:
1,使用拉链法
2,和hashset区别是节点里存的内容
A,hashset 里存key
B,hashmap里存key,value
type MyHashMap struct {
data []*Node
len int
}
type Node struct{
key int
value int
next *Node
}
/** Initialize your data structure here. */
func Constructor() MyHashMap {
return MyHashMap{
data:make([]*Node,10001),
len:10001,
}
}
/** value will always be non-negative. */
func (this *MyHashMap) Put(key int, value int) {
data:=this.data[key%this.len]
if data==nil{
this.data[key%this.len]=&Node{
key:key,
value:value,
}
}else{
if data.key==key{
data.value=value
return
}
for data.next!=nil{
data=data.next
if data.key==key{
data.value=value
return
}
}
data.next=&Node{
key:key,
value:value,
}
}
//this.Print()
}
/** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
func (this *MyHashMap) Get(key int) int {
data:=this.data[key%this.len]
if data==nil{
return -1
}
for data.next!=nil{
if data.key==key{
return data.value
}
data=data.next
}
if data.key==key {
return data.value
}
return -1
}
/** Removes the mapping of the specified value key if this map contains a mapping for the key */
func (this *MyHashMap) Remove(key int) {
data:=this.data[key%this.len]
if data==nil{
return
}
if data.key==key{
this.data[key%this.len]=data.next
//this.Print()
return
}
for data.next!=nil{
if data.next.key!=key{
data=data.next
}else{
data.next=data.next.next
}
}
}
func (this *MyHashMap)Print(){
fmt.Println("----",this.len,":")
for i:=0;i<len(this.data);i++{
d:=this.data[i]
if d!=nil{
fmt.Println(this.data[i].key)
for d.next!=nil{
d=d.next
fmt.Println(d.key)
}
}
}
fmt.Println(":------")
}
/**
* Your MyHashMap object will be instantiated and called as such:
* obj := Constructor();
* obj.Put(key,value);
* param_2 := obj.Get(key);
* obj.Remove(key);
*/
边栏推荐
猜你喜欢
MySQL表的约束
【秒杀办法】根据二叉树的先序遍历、中序遍历、后序遍历快速创建二叉树
今年上半年,我国公路建设总体形势持续向好
How a "cloud" can bring about new changes in the industry
Redis的介绍和使用
Go 语言快速入门指南:第二篇 变量与常量
DeepMind 首席科学家 Oriol Vinyals 最新访谈:通用 AI 的未来是强交互式元学习
MySQL命令(命令行方式,而非图形界面方式)
Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed
图解LeetCode——622. 设计循环队列(难度:中等)
随机推荐
小程序毕设作品之微信体育馆预约小程序毕业设计成品(6)开题答辩PPT
executeScript异步执行的时候没有返回值的原因
一朵“云“如何带来产业新变革
H.265视频流媒体播放器EasyPlayer.js集成时报错“SourceBuffer ”如何解决?
我用这一招让团队的开发效率提升了 100%!
Security First: Tools You Need to Know to Implement DevSecOps Best Practices
【案例】2D变换-旋转动画
9月起中国给予多哥等16国98%税目产品零关税待遇
Taking advantage of cloud-network integration, e-Surfing Cloud has paved the way for digital transformation for government and enterprises
究极异常处理逻辑——多层次异常的处理顺序
SQL 正则解析手机号码提供商
新特性解读 | MySQL 8.0 GIPK 不可见主键
红队实战靶场ATT&CK(一)
灵动微电子发布低功耗 MM32L0130 系列 MCU 产品
MySQL命令(命令行方式,而非图形界面方式)
谁抢走了华大基因的生意?
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works Mini Program Graduation Design Finished Work (6) Question Opening Reply PPT
牛津硕士进碳圈,高瓴红杉经纬一起投了
莱斯大学胡侠团队 ICML 2022 杰出论文: 新型图数据增强方法 G-Mixup|附作者对话
The days of patching are more difficult than the days of writing code