Design a key value data structure support Get/Fetch/Delete/RandomDelete all in O

Posted Keep walking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Design a key value data structure support Get/Fetch/Delete/RandomDelete all in O相关的知识,希望对你有一定的参考价值。

 1 Implement a Key-Value pair datastucture such that there is:
 2     O(1) insertion                    void insert(K, V)
 3     O(1) fetching                     
 4     O(1) deletion                    
 5     O(1) fetching of Random element  
 6     
 7     
 8     
 9 Test cases:
10 1. Unit tests to cover all APIs
11 2. We try delete a key not exist, 
12 3. Performance test case to verify its O(1)  
13 4. Track memory
14 5. 
15     
16 public class KeyValueStore
17 {
18     private Dictionary<string, int> dict = new Dictionary<string, int>();
19     private Tuple<string, SomeType> [] array = new Tuple<string, SomeType>[1000]; 
20     private int current = 0;
21      
22     public void Insert(string key, SomeType value)
23     {
24         if (!dict.ContainsKey(key))
25         {
26             this.array[current] = new Tuple<string, SomeType>(key, value);
27             dict[key] = current;
28             current++;
29         }
30         else
31         {
32             this.array[dict[key]] = new Tuple<string, SomeType>(key, value);
33         }
34     }
35     
36     public SomeType Fetch(string key)
37     {
38         if (!dict.ContainsKey(key))
39         {
40             throw new KeyNotFoundException(key);
41         }
42         else
43         {
44             return this.array[dict[key]].Item2;
45         }
46     }
47     
48     public void Delete(string key)
49     {
50         if (dict.ContainsKey(key))
51         {
52             int toRemoveIndex = dict[key];
53             int lastElementIndex = this.current - 1;
54             
55             // swap last element with the element to remove
56             this.array[toRemoveIndex] = this.array[lastElementIndex];
57             dict.Remove(key);
58             
59             // we need to update the dict for the last element
60             string key = this.array[lastElementIndex].Item1;
61             dict[key] = toRemoveIndex;
62             this.current--;
63         }
64     }
65     
66     public SomeType FetchRandom()
67     {
68         if (current == 0)
69         {
70             throw new ValueNotFoundException();
71         }
72         else
73         {
74             int random = Random(0, current);
75             return this.array[random].Item2;
76         }
77     }
78 }

 

以上是关于Design a key value data structure support Get/Fetch/Delete/RandomDelete all in O的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode&Python] Problem 706. Design HashMap

Ant Design form 表单赋值,清空

706. Design HashMap

LRU Cache

[LeetCode] Design HashMap 设计HashMap

Js对象怎么通过value值拿到key值