算法--------设计哈希集合
设计哈希集合
不使用任何内建的哈希表库设计一个哈希集合具体地说,你的设计应该包含以下的功能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]范围内。
不要使用内建的哈希集合库。
解决方法一:
class MyHashSet {private Node[] hasArray;/** Initialize your data structure here. */public MyHashSet() {hasArray = new Node[5000];}public void add(int key) {int i = hash(key);if (hasArray[i] == null) {hasArray[i] = new Node(key);}else {Node node = hasArray[i];if (node.value == key) {return;}else {Node temp = node;while (temp.next !=null){temp = temp.next;if (temp.value == key) {return;}}Node next = new Node(key);temp.next = next;next.pre = temp;}}}private int hash(int key) {return (key % hasArray.length) & (hasArray.length - 1);}public void remove(int key) {Node node = hasArray[hash(key)];while (node != null){if (node.value == key) {if (node.pre != null) {node.pre.next = node.next;if (node.next != null) {node.next.pre = node.pre;}}else {hasArray[hash(key)] = node.next;if (node.next != null) {node.next.pre = null;}}return;}node = node.next;}}/** Returns true if this set contains the specified element */public boolean contains(int key) {Node node = hasArray[hash(key)];while (node != null){if (node.value == key) {return true;}node = node.next;}return false;}public class Node{public Node next;public Node pre;public int value;public Node(int value){this.value = value;}}}
解决方法二:
网上最快的方法
class MyHashSet {private int[] a;public MyHashSet() {int count = 1000001 / 31 + 1;a = new int[count];}public void add(int key) {int x = key / 31;int y = key % 31;a[x] = a[x] | (1 << y);}public void remove(int key) {int x = key / 31;int y = key % 31;a[x] = (Integer.MAX_VALUE ^ (1 << y)) & a[x];}public boolean contains(int key) {int x = key / 31;int y = key % 31;return (a[x] & (1 << y)) != 0;}}
没看懂。。。
算法--------设计哈希集合相关推荐
- 705. 设计哈希集合
链接:705. 设计哈希集合 题解:https://leetcode-cn.com/problems/design-hashset/solution/she-ji-ha-xi-ji-he-by-lee ...
- 力扣题目——705. 设计哈希集合
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 不使用任何内建的哈希表库设计一个哈希集合(HashSet). 实现 MyHa ...
- leetcode 705. 设计哈希集合
不使用任何内建的哈希表库设计一个哈希集合(HashSet). 实现 MyHashSet 类: void add(key) 向哈希集合中插入值 key . bool contains(key) 返回哈希 ...
- LeetCode(705)——设计哈希集合(JavaScript)
不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 add(value):向哈希集合中插入一个值. contains(value) :返回哈希集合中是否存在这个值. rem ...
- 算法------设计哈希映射
设计哈希映射 不使用任何内建的哈希表库设计一个哈希映射具体地说,你的设计应该包含以下的功能put(key, value):向哈希映射中插入(键,值)的数值对.如果键对应的值已经存在,更新这个值. ge ...
- LeetCode 705. Design HashSet (设计哈希集合)
题目标签:HashMap 题目让我们设计一个 hashset,有add,contains,remove 功能. 建立一个boolean array,index 是数字的值,具体看code. Java ...
- 刷leetcode第705题- 设计哈希集合
2019独角兽企业重金招聘Python工程师标准>>> 这个我可能做的不是很符合题意,虽然AC了,但是没有去用到hash函数之类的方式.同样使用了位运算来搞定这一切,简单易懂.上代码 ...
- 705.设计哈希集合
题目: 思路: 也就是要维护一个二维动态数组来存储这些数据,要注意的是LinkedList中有三种remove()方法 默认使用的是根据索引来移除元素 因此这时,我们要把每个函数的形参都设置为Inte ...
- C#LeetCode刷题之#705-设计哈希集合(Design HashSet)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4114 访问. 不使用任何内建的哈希表库设计一个哈希集合 具体地说 ...
最新文章
- mysql中change用法,mysql 中alter的用法以及一些步骤
- EM12C监控遇到 ‘cursor: pin S wait on X’ waits.
- 柱形图无数据可选中_这种漂亮的“连体”柱形图,99%的人不会做!
- Property 'submit' of object #HTMLFormElement is not a function
- 手动写sonar plugin 一直File is not a plugin.
- 大话数据结构—栈与队列
- 20165236 2017-2018-2 《Java程序设计》结对编程练习_四则运算
- Android开发笔记(一百零九)利用网盘实现云存储
- mysql报表展示工具_Navicat for MySQL 设计报表版面教程
- MyBatis可视化代码生成工具
- 今日头条号问答微头条原创收益向百粉开放
- 计算机网络有哪几种拓补结构,常见的五种计算机网络拓扑结构分析
- APK查壳软件(根据so名)
- 工作笔记-----mingw libgcc_s_sjlj-1.dll is missing
- 上传文件到github上的两种方式
- 看了下面的关于大亚湾核电站的一些报道,我终于明白为什么老弟在惠阳买的房子会这么便宜了!
- PCIe Switch
- 【算法专题】平面图形的面积并问题
- RK Android11 系统常见修改
- 空间平面方程matlab求解,在Python中求解平面方程(如在Matlab中)
热门文章
- python until语句_Python3 循环
- 13.在Ubuntu20.04下,chromium无法输入中文以及如何卸载chromium浏览器
- 环境变量太大解决方法
- UpdateData使用简介
- 打印机是微型计算机必须配置的一种,计算机第一章测试卷
- 灰色预测模型代码_生信审稿人最常问的验证!临床预测模型中的PCA主成分分析!这点你注意到了没!(附代码)...
- layuiajax提交表单控制层代码_究竟怎么用Restful风格编代码必看这篇。(二)
- python数据库-mysql
- 一段话系列-QPS、TPS、PV是很么如何计算
- docker笔记1----Get Docker