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.相当于里面有了检查的阈值

  • 相关阅读:
    Vue中改变对象的注意事项
    Object.assign简单总结
    Base64编码
    vue中prop传值时加不加v-bind(冒号:)
    内联元素的padding和margin
    flex自适应宽度显示省略号
    Http和Https
    JVisualVM 模拟一次内存泄漏场景分析
    Lucene
    布隆算法原理
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13424247.html
Copyright © 2011-2022 走看看