设计哈希集合

不使用任何内建的哈希表库设计一个哈希集合具体地说,你的设计应该包含以下的功能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;}}

没看懂。。。

算法--------设计哈希集合相关推荐

  1. 705. 设计哈希集合

    链接:705. 设计哈希集合 题解:https://leetcode-cn.com/problems/design-hashset/solution/she-ji-ha-xi-ji-he-by-lee ...

  2. 力扣题目——705. 设计哈希集合

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 不使用任何内建的哈希表库设计一个哈希集合(HashSet). 实现 MyHa ...

  3. leetcode 705. 设计哈希集合

    不使用任何内建的哈希表库设计一个哈希集合(HashSet). 实现 MyHashSet 类: void add(key) 向哈希集合中插入值 key . bool contains(key) 返回哈希 ...

  4. LeetCode(705)——设计哈希集合(JavaScript)

    不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 add(value):向哈希集合中插入一个值. contains(value) :返回哈希集合中是否存在这个值. rem ...

  5. 算法------设计哈希映射

    设计哈希映射 不使用任何内建的哈希表库设计一个哈希映射具体地说,你的设计应该包含以下的功能put(key, value):向哈希映射中插入(键,值)的数值对.如果键对应的值已经存在,更新这个值. ge ...

  6. LeetCode 705. Design HashSet (设计哈希集合)

    题目标签:HashMap 题目让我们设计一个 hashset,有add,contains,remove 功能. 建立一个boolean array,index 是数字的值,具体看code. Java ...

  7. 刷leetcode第705题- 设计哈希集合

    2019独角兽企业重金招聘Python工程师标准>>> 这个我可能做的不是很符合题意,虽然AC了,但是没有去用到hash函数之类的方式.同样使用了位运算来搞定这一切,简单易懂.上代码 ...

  8. 705.设计哈希集合

    题目: 思路: 也就是要维护一个二维动态数组来存储这些数据,要注意的是LinkedList中有三种remove()方法 默认使用的是根据索引来移除元素 因此这时,我们要把每个函数的形参都设置为Inte ...

  9. C#LeetCode刷题之#705-设计哈希集合​​​​​​​(Design HashSet)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4114 访问. 不使用任何内建的哈希表库设计一个哈希集合 具体地说 ...

最新文章

  1. mysql中change用法,mysql 中alter的用法以及一些步骤
  2. EM12C监控遇到 ‘cursor: pin S wait on X’ waits.
  3. 柱形图无数据可选中_这种漂亮的“连体”柱形图,99%的人不会做!
  4. Property 'submit' of object #HTMLFormElement is not a function
  5. 手动写sonar plugin 一直File is not a plugin.
  6. 大话数据结构—栈与队列
  7. 20165236 2017-2018-2 《Java程序设计》结对编程练习_四则运算
  8. Android开发笔记(一百零九)利用网盘实现云存储
  9. mysql报表展示工具_Navicat for MySQL 设计报表版面教程
  10. MyBatis可视化代码生成工具
  11. 今日头条号问答微头条原创收益向百粉开放
  12. 计算机网络有哪几种拓补结构,常见的五种计算机网络拓扑结构分析
  13. APK查壳软件(根据so名)
  14. 工作笔记-----mingw libgcc_s_sjlj-1.dll is missing
  15. 上传文件到github上的两种方式
  16. 看了下面的关于大亚湾核电站的一些报道,我终于明白为什么老弟在惠阳买的房子会这么便宜了!
  17. PCIe Switch
  18. 【算法专题】平面图形的面积并问题
  19. RK Android11 系统常见修改
  20. 空间平面方程matlab求解,在Python中求解平面方程(如在Matlab中)

热门文章

  1. python until语句_Python3 循环
  2. 13.在Ubuntu20.04下,chromium无法输入中文以及如何卸载chromium浏览器
  3. 环境变量太大解决方法
  4. UpdateData使用简介
  5. 打印机是微型计算机必须配置的一种,计算机第一章测试卷
  6. 灰色预测模型代码_生信审稿人最常问的验证!临床预测模型中的PCA主成分分析!这点你注意到了没!(附代码)...
  7. layuiajax提交表单控制层代码_究竟怎么用Restful风格编代码必看这篇。(二)
  8. python数据库-mysql
  9. 一段话系列-QPS、TPS、PV是很么如何计算
  10. docker笔记1----Get Docker