当前位置:网站首页>golang刷leetcode 经典(5)设计哈希集合
golang刷leetcode 经典(5)设计哈希集合
2022-08-02 17:37:00 【用户9710217】
不使用任何内建的哈希表库设计一个哈希集合
具体地说,你的设计应该包含以下的功能
add(value):向哈希集合中插入一个值。
contains(value) :返回哈希集合中是否存在这个值。
remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。
示例:
MyHashSet hashSet = new MyHashSet();
hashSet.add(1);
hashSet.add(2);
hashSet.contains(1); // 返回 true
hashSet.contains(3); // 返回 false (未找到)
hashSet.add(2);
hashSet.contains(2); // 返回 true
hashSet.remove(2);
hashSet.contains(2); // 返回 false (已经被删除)
注意:
所有的值都在 [0, 1000000]的范围内。
操作的总数目在[1, 10000]范围内。
不要使用内建的哈希集合库。
解题思路:
1,本题考察对hashset 的理解
2,使用拉链法
3,设计简单的hash函数,取模
hashset 和hashmap 区别:
HashSet:
HashSet实现了Set接口,它不允许集合中出现重复元素。当我们提到HashSet时,第一件事就是在将对象存储在
HashSet之前,要确保重写hashCode()方法和equals()方法,这样才能比较对象的值是否相等,确保集合中没有
HashMap:
HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许出现重复的键(Key)。Map接口有两个基本的实现
TreeMap和HashMap。TreeMap保存了对象的排列次序,而HashMap不能。HashMap可以有空的键值对(Key(null)-Value(null))
总结一句话,hash set node节点里存储的是key,hash map node节点存储的是key value pair
代码
type MyHashSet struct {
data []*Node
len int
}
type Node struct{
key int
next *Node
}
/** Initialize your data structure here. */
func Constructor() MyHashSet {
return MyHashSet{
data:make([]*Node,10001),
len:10001,
}
}
func (this *MyHashSet) Add(key int) {
data:=this.data[key%this.len]
if data==nil{
this.data[key%this.len]=&Node{
key:key,
}
}else{
if data.key==key{
return
}
for data.next!=nil{
data=data.next
if data.key==key{
return
}
}
data.next=&Node{
key:key,
}
}
//this.Print()
}
func (this *MyHashSet)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(":------")
}
func (this *MyHashSet) 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
}
}
}
/** Returns true if this set contains the specified element */
func (this *MyHashSet) Contains(key int) bool {
data:=this.data[key%this.len]
if data==nil{
return false
}
for data.next!=nil{
if data.key==key{
return true
}
data=data.next
}
return data.key==key
}
/**
* Your MyHashSet object will be instantiated and called as such:
* obj := Constructor();
* obj.Add(key);
* obj.Remove(key);
* param_3 := obj.Contains(key);
*/
边栏推荐
- C语言中的一系列操作符
- NoSQL之redis缓存雪崩、穿透、击穿概念解决办法
- H.265视频流媒体播放器EasyPlayer.js集成时报错“SourceBuffer ”如何解决?
- 年轻人接棒大妈,金价跌回“4字头”,七夕迎黄金消费小热潮
- Wechat Gymnasium Appointment Mini Program Graduation Design Finished Work (5) Task Book
- Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
- 启航
- 动力电池扩产潮,宁德时代遭围剿
- vulnhub W34kn3ss: 1
- Cpolar application example of data acquisition equipment
猜你喜欢
随机推荐
LeetCode·76.最小覆盖子串·滑动窗口
SQL Statement Basics
罗敏背后是抖音
MySQL基本语法
Go 语言快速入门指南:第二篇 变量与常量
golang源码阅读(11)GO中各个目录的功能
Taking advantage of cloud-network integration, e-Surfing Cloud has paved the way for digital transformation for government and enterprises
用函数递归的方法解决汉诺塔问题
一文搞懂│php 中的 DI 依赖注入
Navicat for mysql cracked versions installed
【21天学习挑战赛学习打卡】顺序查找
字节面试官狂问我:你没有高并发、性能调优经验,为什么录取你?
发挥云网融合优势,天翼云为政企铺设数字化转型跑道
二舅“反转”了?
谁抢走了华大基因的生意?
cpolar应用实例之多设备数据采集
NeRF:火爆科研圈的三维重建技术大揭秘
Mysql和Redis如何保证数据一致性
erp系统和wms系统有什么区别
二叉查找树的查找