LeetCode705 设计哈希集合 & 706 设计哈希映射
LeetCode705 设计哈希集合
题目
解题
// javascript
var MyHashSet = function() {
this.BASE = 769;
this.data = new Array(this.BASE).fill(0).map(() => new Array());
};
/**
* @param {number} key
* @return {void}
*/
MyHashSet.prototype.add = function(key) {
const h = this.hash(key);
for (const element of this.data[h]) {
if (element === key) return;
}
this.data[h].push(key);
};
/**
* @param {number} key
* @return {void}
*/
MyHashSet.prototype.remove = function(key) {
const h = this.hash(key);
for (let i = 0; i < this.data[h].length; ++i) {
if (this.data[h][i] === key) {
this.data[h].splice(i, 1);
return;
}
}
};
/**
* @param {number} key
* @return {boolean}
*/
MyHashSet.prototype.contains = function(key) {
const h = this.hash(key);
for (const element of this.data[h]) {
if (element === key) return true;
}
return false;
};
MyHashSet.prototype.hash = function(key) {
return key % this.BASE;
};
706 设计哈希映射
题目
解题
和 705 题基本一样,只是现在要插入的是键值对,所以二维数组里存储的是二元数组。
//
var MyHashMap = function() {
this.BASE = 769;
this.data = new Array(this.BASE).fill(0).map(() => new Array());
};
/**
* @param {number} key
* @param {number} value
* @return {void}
*/
MyHashMap.prototype.put = function(key, value) {
const h = this.hash(key);
for (const element of this.data[h]) {
if (element[0] === key) {
element[1] = value;
// 要 return !!!
return;
}
}
this.data[h].push([key, value]);
};
/**
* @param {number} key
* @return {number}
*/
MyHashMap.prototype.get = function(key) {
const h = this.hash(key);
for (const element of this.data[h]) {
if (element[0] === key) {
return element[1];
}
}
return -1;
};
/**
* @param {number} key
* @return {void}
*/
MyHashMap.prototype.remove = function(key) {
const h = this.hash(key);
for (let i = 0; i < this.data[h].length; ++i) {
if (this.data[h][i][0] === key) {
this.data[h].splice(i, 1);
return;
}
}
};
MyHashMap.prototype.hash = function(key) {
return key % this.BASE;
};