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

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;

    }
}  

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

时间: 2024-10-11 21:48:47

381. Insert Delete GetRandom O(1) - Duplicates allowed的相关文章

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

Design a data structure that supports all following operations in average O(1) time. Note: Duplicate elements are allowed. insert(val): Inserts an item val to the collection. remove(val): Removes an item val from the collection if present. getRandom:

LeetCode 381. Insert Delete GetRandom O(1) - Duplicates allowed (插入删除和获得随机数 常数时间 允许重复项)

Design a data structure that supports all following operations in average O(1) time. Note: Duplicate elements are allowed. insert(val): Inserts an item val to the collection. remove(val): Removes an item val from the collection if present. getRandom:

[LeetCode] Insert Delete GetRandom O(1) - Duplicates allowed 常数时间内插入删除和获得随机数 - 允许重复

Design a data structure that supports all following operations in average O(1) time. Note: Duplicate elements are allowed. insert(val): Inserts an item val to the collection. remove(val): Removes an item val from the collection if present. getRandom:

【Leetcode】Insert Delete GetRandom O(1) - Duplicates allowed

题目链接:https://leetcode.com/problems/insert-delete-getrandom-o1-duplicates-allowed/ 题目: Design a data structure that supports all following operations in average O(1) time. Note: Duplicate elements are allowed. insert(val): Inserts an item val to the c

Insert Delete GetRandom O(1) - Duplicates allowed

Design a data structure that supports all following operations in average O(1) time. Note: Duplicate elements are allowed. insert(val): Inserts an item val to the collection. remove(val): Removes an item val from the collection if present. getRandom:

Leetcode: Insert Delete GetRandom O(1) - Duplicates allowed

Design a data structure that supports all following operations in average O(1) time. Note: Duplicate elements are allowed. insert(val): Inserts an item val to the collection. remove(val): Removes an item val from the collection if present. getRandom:

leetcode 381.Insert Delete GetRandom

这道题中要求使用O(1)的方法来删除和插入元素的,那么首先需要寻找到对应的元素,这个可以使用map的O(1)的查询时间的,然后是删除对应的元素的,那么可以根据 堆排序中类似的做法把最后面的元素插入到前面来并且置换掉对应的值的. class RandomizedCollection { public: /** Initialize your data structure here. */ RandomizedCollection() { } /** Inserts a value to the c

LeetCode Insert Delete GetRandom O(1)

原题链接在这里:https://leetcode.com/problems/insert-delete-getrandom-o1/?tab=Description 题目: Design a data structure that supports all following operations in average O(1) time. insert(val): Inserts an item val to the set if not already present. remove(val)

LeetCode 380. Insert Delete GetRandom O(1)

380. Insert Delete GetRandom O(1) Add to List Description Submission Solutions Total Accepted: 21771 Total Submissions: 56175 Difficulty: Medium Contributors: Admin Design a data structure that supports all following operations in average O(1) time.