MCPcopy Create free account
hub / github.com/Tiwarishashwat/InterviewCodes / AllOne

Class AllOne

AllOoneDataStructure.java:13–100  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11 }
12}
13class AllOne {
14 HashMap<String, Node> map;
15 Node head;
16 Node tail;
17 public AllOne() {
18 head = new Node(0);
19 tail = new Node(0);
20 map = new HashMap<>();
21 head.next = tail;
22 tail.prev = head;
23 }
24
25 public void inc(String key) {
26 Node cur = head;
27 int newFreq = 1;
28 if(map.containsKey(key)){
29 cur = map.get(key);
30 newFreq = cur.freq + 1;
31 cur.keys.remove(key);
32 }
33 if(cur.next.freq == newFreq){
34 cur.next.keys.add(key);
35 }else{ // insert a node with newFreq
36 Node node = new Node(newFreq);
37 node.keys.add(key);
38 Node nextNode = cur.next;
39 node.next = nextNode;
40 nextNode.prev = node;
41 cur.next = node;
42 node.prev = cur;
43 }
44 map.put(key, cur.next);
45 if(cur.keys.size()==0 && cur!=head){
46 removeNode(cur);
47 }
48 }
49
50 public void dec(String key) {
51 Node cur = map.get(key);
52 int newFreq = cur.freq - 1;
53 cur.keys.remove(key);
54 if(newFreq == 0){
55 if(cur.keys.size()==0){
56 removeNode(cur);
57 }
58 map.remove(key);
59 return;
60 }
61
62 if(cur.prev.freq == newFreq){
63 cur.prev.keys.add(key);
64 }else{ // insert a node with newFreq
65 Node node = new Node(newFreq);
66 node.keys.add(key);
67 Node prevNode = cur.prev;
68 node.prev = prevNode;
69 prevNode.next = node;
70 node.next = cur;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected