LeetCode705 設計哈希集合 & 706 設計哈希映射
- 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;
};