当前位置:网站首页>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);
*/
边栏推荐
- 详细教学——1688关键词搜索API操作流程
- 一些与开发者体验有关的话题
- 织梦自定义表单添加全选和全不选功能按钮
- Go 语言快速入门指南:第二篇 变量与常量
- Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works Mini Program Graduation Design Finished Work (6) Question Opening Reply PPT
- golang源码分析(3):thrift
- MySQL索引
- docker安装Oracle之后常用的一些命令
- 查看数据库数据量大小,占用磁盘大小
- golang源码分析(7):chan
猜你喜欢
随机推荐
How a "cloud" can bring about new changes in the industry
MySQL命令(命令行方式,而非图形界面方式)
Go编译原理系列6(类型检查)
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works (7) Mid-term Inspection Report
Taking advantage of cloud-network integration, e-Surfing Cloud has paved the way for digital transformation for government and enterprises
KunlunBase 1.0 is released!
透过案例看清API接口的作用——演示1688商品详情接口
Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed
牛津硕士进碳圈,高瓴红杉经纬一起投了
深圳地铁16号线二期进入盾构施工阶段,首台盾构机顺利始发
Flink学习9:配置idea开发flink-Scala程序环境
Redis的介绍和使用
Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
docker安装Oracle之后常用的一些命令
小程序毕设作品之微信体育馆预约小程序毕业设计成品(5)任务书
攻防世界-favorite_number
发挥云网融合优势,天翼云为政企铺设数字化转型跑道
在线文档Sheet技术解析
erp系统和wms系统有什么区别
ES: WeakSet