Skip to content

Commit 7218196

Browse files
author
Gonzalo Diaz
committed
[REFACTOR] [Hacker Rank] Interview Preparation Kit: Dictionaries and Hashmaps: Frequency Queries. Solved ✅. Solve all test cases. High complexity reduced.
1 parent dc3b850 commit 7218196

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries.js

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,28 @@
22
* @link Problem definition [[docs/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency-queries.md]]
33
*/
44

5+
export function updateFrequency(frequencyMap, data, currentFreq, newFreq) {
6+
const freqMap = frequencyMap;
7+
8+
if (newFreq > 0) {
9+
if (freqMap?.[newFreq]) {
10+
freqMap[newFreq].push(data);
11+
} else {
12+
freqMap[newFreq] = [data];
13+
}
14+
}
15+
16+
if (freqMap?.[currentFreq]) {
17+
freqMap[currentFreq] = freqMap[currentFreq].filter((f) => f !== data);
18+
19+
if (freqMap[currentFreq].length === 0) {
20+
delete freqMap?.[currentFreq];
21+
}
22+
}
23+
24+
return freqMap;
25+
}
26+
527
export function freqQuery(queries) {
628
const result = [];
729
const dataMap = {};
@@ -18,23 +40,23 @@ export function freqQuery(queries) {
1840
queries.forEach((query) => {
1941
const [operation, data] = query;
2042

21-
const currentFreqValue = dataMap?.[data] ?? __INITIAL__;
22-
let newFreqKey = currentFreqValue + 1;
43+
const currentFreq = dataMap?.[data] ?? __INITIAL__;
44+
let newFreq = currentFreq + 1;
2345

2446
switch (operation) {
2547
case __INSERT__:
2648
// map of values
27-
dataMap[data] = currentFreqValue + 1;
49+
dataMap[data] = currentFreq + 1;
2850

2951
// map of frequencies
30-
newFreqKey = currentFreqValue + 1;
52+
newFreq = currentFreq + 1;
3153
break;
3254
case __DELETE__:
3355
// map of values
34-
dataMap[data] = Math.max(0, currentFreqValue - 1);
56+
dataMap[data] = Math.max(0, currentFreq - 1);
3557

3658
// map of frequencies
37-
newFreqKey = currentFreqValue - 1;
59+
newFreq = currentFreq - 1;
3860

3961
break;
4062
case __SELECT__: {
@@ -50,23 +72,7 @@ export function freqQuery(queries) {
5072
}
5173

5274
if (operation === __INSERT__ || operation === __DELETE__) {
53-
if (newFreqKey > 0) {
54-
if (freqMap?.[newFreqKey]) {
55-
freqMap[newFreqKey].push(data);
56-
} else {
57-
freqMap[newFreqKey] = [data];
58-
}
59-
}
60-
61-
if (freqMap?.[currentFreqValue]) {
62-
freqMap[currentFreqValue] = freqMap[currentFreqValue].filter(
63-
(f) => f !== data
64-
);
65-
66-
if (freqMap[currentFreqValue].length === 0) {
67-
delete freqMap?.[currentFreqValue];
68-
}
69-
}
75+
updateFrequency(freqMap, data, currentFreq, newFreq);
7076
}
7177
});
7278

0 commit comments

Comments
 (0)