Compare commits
1 Commits
523f7a2609
...
0bf69767b8
Author | SHA1 | Date | |
---|---|---|---|
0bf69767b8 |
7
705_design_hashset/Cargo.lock
generated
7
705_design_hashset/Cargo.lock
generated
@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "design_hashset"
|
|
||||||
version = "0.1.0"
|
|
@ -1,6 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "design_hashset"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[dependencies]
|
|
@ -1,47 +0,0 @@
|
|||||||
use std::hash::{DefaultHasher, Hash, Hasher};
|
|
||||||
|
|
||||||
pub struct MyHashSet {
|
|
||||||
capacity: usize,
|
|
||||||
buckets: Vec<Vec<i32>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MyHashSet {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
const CAPACITY: usize = 4096;
|
|
||||||
Self {
|
|
||||||
capacity: CAPACITY,
|
|
||||||
buckets: vec![Vec::new(); CAPACITY],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn add(&mut self, key: i32) {
|
|
||||||
let index = self.get_bucket_index(key);
|
|
||||||
let list = self.buckets.get_mut(index).unwrap();
|
|
||||||
|
|
||||||
if list.iter().find(|num| **num == key).is_none() {
|
|
||||||
list.push(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn remove(&mut self, key: i32) {
|
|
||||||
let index = self.get_bucket_index(key);
|
|
||||||
let list = self.buckets.get_mut(index).unwrap();
|
|
||||||
|
|
||||||
if let Some(index_to_remove) = list.iter().position(|num| *num == key) {
|
|
||||||
list.remove(index_to_remove);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn contains(&self, key: i32) -> bool {
|
|
||||||
let index = self.get_bucket_index(key);
|
|
||||||
let list = self.buckets.get(index).unwrap();
|
|
||||||
|
|
||||||
list.iter().find(|num| **num == key).is_some()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_bucket_index(&self, key: impl Hash) -> usize {
|
|
||||||
let mut hasher = DefaultHasher::new();
|
|
||||||
key.hash(&mut hasher);
|
|
||||||
(hasher.finish() as usize) & (self.capacity - 1)
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,10 +7,10 @@ pub struct MyHashMap {
|
|||||||
|
|
||||||
impl MyHashMap {
|
impl MyHashMap {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
const CAPACITY: usize = 4096;
|
let capacity = 8192;
|
||||||
Self {
|
Self {
|
||||||
capacity: CAPACITY,
|
capacity: capacity,
|
||||||
buckets: vec![Vec::new(); CAPACITY],
|
buckets: vec![Vec::new(); capacity],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user