Skip to content

Commit 2caa0f6

Browse files
author
Gonzalo Diaz
committed
[BUGFIX] [Hacker Rank] Interview Preparation Kit: Dictionaries and Hashmaps: Frequency Queries.
* Fixed result. Fails due time out in big cases. * Basic test cases added.
1 parent 2ae1873 commit 2caa0f6

File tree

3 files changed

+82
-30
lines changed

3 files changed

+82
-30
lines changed

src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries.test.ts renamed to src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_bruteforce.test.ts

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
11
import { describe, expect, it } from '@jest/globals';
22
import { logger as console } from '../../../logger';
33

4-
import { freqQuery } from './frequency_queries';
5-
6-
const TEST_CASES = [
7-
{
8-
title: 'Sample Test Case 0',
9-
input: [
10-
[1, 5],
11-
[1, 6],
12-
[3, 2],
13-
[1, 10],
14-
[1, 10],
15-
[1, 6],
16-
[2, 5],
17-
[3, 2]
18-
],
19-
expected: [0, 1]
20-
}
21-
];
4+
import { freqQuery } from './frequency_queries_bruteforce';
5+
import SMALL_TEST_CASES from './frequency_queries_testcases.json';
226

237
describe('frequency_queries', () => {
248
it('freqQuery test cases', () => {
25-
expect.assertions(1);
9+
expect.assertions(4);
2610

27-
TEST_CASES.forEach((value) => {
11+
SMALL_TEST_CASES.forEach((value) => {
2812
const answer = freqQuery(value.input);
2913

3014
console.debug(`freqQuery(${value.input}) solution found: ${answer}`);

src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries.ts renamed to src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_bruteforce.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ export function freqQuery(queries: number[][]): number[] {
1212
const __DELETE__ = 2;
1313
const __SELECT__ = 3;
1414

15+
const __NOT_FOUND__ = 0;
16+
const __FOUND__ = 1;
17+
1518
queries.forEach((query) => {
1619
const [operation, data] = query;
1720

@@ -24,18 +27,15 @@ export function freqQuery(queries: number[][]): number[] {
2427
case __DELETE__:
2528
data_map[data] = Math.max(0, current - 1);
2629
break;
27-
case __SELECT__:
28-
for (const [key, value] of Object.entries(data_map)) {
29-
console.log(key, value);
30-
if (value == data) {
31-
result.push(1);
32-
break;
33-
}
34-
}
35-
if (result.length == 0) {
36-
result.push(0);
30+
case __SELECT__: {
31+
const uniqueDatavalues = new Set(Object.values(data_map));
32+
if (uniqueDatavalues.has(data)) {
33+
result.push(__FOUND__);
34+
} else {
35+
result.push(__NOT_FOUND__);
3736
}
3837
break;
38+
}
3939
default:
4040
throw new Error('Invalid operation');
4141
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
[
2+
{
3+
"title": "Sample Test Case 0",
4+
"input": [
5+
[1, 5],
6+
[1, 6],
7+
[3, 2],
8+
[1, 10],
9+
[1, 10],
10+
[1, 6],
11+
[2, 5],
12+
[3, 2]
13+
],
14+
"expected": [0, 1]
15+
},
16+
{
17+
"title": "Sample Test Case 1",
18+
"input": [
19+
[3, 4],
20+
[2, 1003],
21+
[1, 16],
22+
[3, 1]
23+
],
24+
"expected": [0, 1]
25+
},
26+
{
27+
"title": "Sample Test Case 2",
28+
"input": [
29+
[1, 3],
30+
[2, 3],
31+
[3, 2],
32+
[1, 4],
33+
[1, 5],
34+
[1, 5],
35+
[1, 4],
36+
[3, 2],
37+
[2, 4],
38+
[3, 2]
39+
],
40+
"expected": [0, 1, 1]
41+
},
42+
{
43+
"title": "Sample Test Case 3",
44+
"input": [
45+
[1, 3],
46+
[1, 38],
47+
[2, 1],
48+
[1, 16],
49+
[2, 1],
50+
[2, 2],
51+
[1, 64],
52+
[1, 84],
53+
[3, 1],
54+
[1, 100],
55+
[1, 10],
56+
[2, 2],
57+
[2, 1],
58+
[1, 67],
59+
[2, 2],
60+
[3, 1],
61+
[1, 99],
62+
[1, 32],
63+
[1, 58],
64+
[3, 2]
65+
],
66+
"expected": [1, 1, 0]
67+
}
68+
]

0 commit comments

Comments
 (0)