码迷,mamicode.com
首页 > 其他好文 > 详细

381. Insert Delete GetRandom O(1) - Duplicates allowed

时间:2018-08-10 16:02:16      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:hashtable   last   try   htable   ash   nbsp   get   ali   returns   

381. Insert Delete GetRandom O(1) - Duplicates allowed


https://www.youtube.com/watch?v=mRTgft9sBhA

这个自己写写,花花讲的思路还行

https://zxi.mytechroad.com/blog/hashtable/leetcode-381-insert-delete-getrandom-o1-duplicates-allowed/


没通过

class RandomizedCollection {

    /** Initialize your data structure here. */
  
    class Entry{
      public int value;
      public int index;
      public Entry(int val, int idx){
        value = val;
        index = idx;
      }
    }
  
  
    private  HashMap<Integer, List<Integer>> map;
    private List<Entry> vals;
    private Random rand;
  
  
    public RandomizedCollection() {
      map = new HashMap<>();
      vals = new ArrayList<>();
      rand = new Random();
        
    }
    
    /** Inserts a value to the collection. Returns true if the collection did not already contain the specified element. */
    public boolean insert(int val) {
      if(!map.containsKey(val)){
        map.put(val, new ArrayList<>());
      }
      List<Integer> list = map.get(val);
      list.add(vals.size());
      map.put(val, list);
      vals.add(new Entry(val, list.size()-1));
      return list.size() == 1;
        
    }
    
    /** Removes a value from the collection. Returns true if the collection contained the specified element. */
    public boolean remove(int val) {
      if(!map.containsKey(val)) return false;
      
      // need to get the index of the removing value in the list<entry>
      List<Integer> list = map.get(val);
      int size = list.size();
      int lastIndex = list.get(size -1);
      list.remove(size-1);
      if(list.size() == 0){
        map.remove(val);
      }
      
      // get the value from the last slot in the list<entry>
      int listSize = vals.size();
      Entry lastSlot = vals.get(listSize - 1);
      int lvalue = lastSlot.value;
      int lindex = lastSlot.index;
      
      map.get(lvalue).set(lindex,lastIndex);
      
      // swap the removing slot with the last slot 
      vals.set(lastIndex, lastSlot);
      vals.remove(listSize - 1);
      return true;
      
    }
    
    /** Get a random element from the collection. */
    public int getRandom() {
      return vals.get(rand.nextInt(vals.size())).value;
        
    }
}  

 

381. Insert Delete GetRandom O(1) - Duplicates allowed

标签:hashtable   last   try   htable   ash   nbsp   get   ali   returns   

原文地址:https://www.cnblogs.com/tobeabetterpig/p/9454900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!