zoukankan      html  css  js  c++  java
  • 705. Design HashSet

    Design a HashSet without using any built-in hash table libraries.

    To be specific, your design should include these functions:

    • add(value): Insert a value into the HashSet. 
    • contains(value) : Return whether the value exists in the HashSet or not.
    • remove(value): Remove a value in the HashSet. If the value does not exist in the HashSet, do nothing.


    Example:

    MyHashSet hashSet = new MyHashSet();
    hashSet.add(1);         
    hashSet.add(2);         
    hashSet.contains(1);    // returns true
    hashSet.contains(3);    // returns false (not found)
    hashSet.add(2);          
    hashSet.contains(2);    // returns true
    hashSet.remove(2);          
    hashSet.contains(2);    // returns false (already removed)
    


    Note:

      • All values will be in the range of [0, 1000000].
      • The number of operations will be in the range of [1, 10000].
      • Please do not use the built-in HashSet library.
    class MyHashSet {
        
        List<Integer> list;
        /** Initialize your data structure here. */
        public MyHashSet() {
            list = new ArrayList();
        }
        
        public void add(int key) {
            if(list.indexOf(key) < 0) list.add((Integer) key);
        }
        
        public void remove(int key) {
            if(list.indexOf(key) >= 0) list.remove((Integer) key);
        }
        
        /** Returns true if this set contains the specified element */
        public boolean contains(int key) {
            return list.indexOf((Integer) key) >= 0;
        }
    }

    1. 相当于bruteforce了

    class MyHashSet {
        boolean[] arr = new boolean[100];// start with 100 elements for fast initialization
        /** Initialize your data structure here. */
        public MyHashSet() {
            
        }
        
        public void add(int key) {
            if(key>=arr.length) // if array is too small to accomodate key, extend it.
                extend(key);
            arr[key]=true;
        }
        
        public void remove(int key) {
            if(key>=arr.length) // if array is too small to accomodate key, extend it.
                return;
            arr[key]=false;
        }
        
        /** Returns true if this set contains the specified element */
        public boolean contains(int key) {
            if(key>=arr.length) // key cannot be in array if array's length < key
                return false;
            return arr[key]==true;
        }
        
        public void extend(int key){
            arr= Arrays.copyOf(arr, key+1);  // extend array to one more item than necessary, we need "key" items. 
                                             // we give "key+1" items to reduce collisions.
        }
    }

    2.相当于里面有了检查的阈值

  • 相关阅读:
    CentOS防火墙相关命令
    Redis中几种数据类型的基本操作指令
    Pandas字符串操作及实例应用
    Pandas排列和随机采样
    Pandas数据的去重,替换和离散化,异常值的检测
    Pandas重塑和轴向旋转
    Pandas合并数据集之concat、combine_first方法
    Pandas合并数据集之merge、join方法
    转正述职报告
    Pandas操作数据库及保存csv
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13424247.html
Copyright © 2011-2022 走看看