Skip to content

Commit ca5b470

Browse files
add a solution for 2080
1 parent 223ea6e commit ca5b470

File tree

2 files changed

+60
-15
lines changed

2 files changed

+60
-15
lines changed

src/main/java/com/fishercoder/solutions/_2080.java

+27
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,31 @@ public int query(int left, int right, int value) {
3535
}
3636
}
3737
}
38+
39+
public static class Solution2 {
40+
public static class RangeFreqQuery {
41+
Map<Integer, TreeMap<Integer, Integer>> map;
42+
43+
public RangeFreqQuery(int[] arr) {
44+
map = new HashMap<>();
45+
for (int i = 0; i < arr.length; i++) {
46+
map.putIfAbsent(arr[i], new TreeMap<>());
47+
map.get(arr[i]).put(i, map.get(arr[i]).size());
48+
}
49+
}
50+
51+
public int query(int left, int right, int value) {
52+
if (!map.containsKey(value)) {
53+
return 0;
54+
}
55+
TreeMap<Integer, Integer> indexMap = map.get(value);
56+
Integer start = indexMap.ceilingKey(left);
57+
Integer end = indexMap.floorKey(right);
58+
if (start == null || end == null) {
59+
return 0;
60+
}
61+
return indexMap.get(end) - indexMap.get(start) + 1;
62+
}
63+
}
64+
}
3865
}

src/test/java/com/fishercoder/_2080Test.java

+33-15
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,50 @@
66
import static org.junit.Assert.assertEquals;
77

88
public class _2080Test {
9-
private static _2080.Solution1.RangeFreqQuery rangeFreqQuery;
9+
private static _2080.Solution1.RangeFreqQuery rangeFreqQuery1;
10+
private static _2080.Solution2.RangeFreqQuery rangeFreqQuery2;
1011

1112
@Test
1213
public void test1() {
13-
rangeFreqQuery = new _2080.Solution1.RangeFreqQuery(new int[]{12, 33, 4, 56, 22, 2, 34, 33, 22, 12, 34, 56});
14-
assertEquals(1, rangeFreqQuery.query(1, 2, 4));
15-
assertEquals(2, rangeFreqQuery.query(0, 11, 33));
14+
rangeFreqQuery1 = new _2080.Solution1.RangeFreqQuery(new int[]{12, 33, 4, 56, 22, 2, 34, 33, 22, 12, 34, 56});
15+
assertEquals(1, rangeFreqQuery1.query(1, 2, 4));
16+
assertEquals(2, rangeFreqQuery1.query(0, 11, 33));
17+
18+
rangeFreqQuery2 = new _2080.Solution2.RangeFreqQuery(new int[]{12, 33, 4, 56, 22, 2, 34, 33, 22, 12, 34, 56});
19+
assertEquals(1, rangeFreqQuery2.query(1, 2, 4));
20+
assertEquals(2, rangeFreqQuery2.query(0, 11, 33));
1621
}
1722

1823
@Test
1924
public void test2() {
20-
rangeFreqQuery = new _2080.Solution1.RangeFreqQuery(new int[]{1, 1, 1, 2, 2});
21-
assertEquals(0, rangeFreqQuery.query(0, 1, 2));
22-
assertEquals(3, rangeFreqQuery.query(0, 2, 1));
23-
assertEquals(1, rangeFreqQuery.query(3, 3, 2));
24-
assertEquals(1, rangeFreqQuery.query(2, 2, 1));
25+
rangeFreqQuery1 = new _2080.Solution1.RangeFreqQuery(new int[]{1, 1, 1, 2, 2});
26+
assertEquals(0, rangeFreqQuery1.query(0, 1, 2));
27+
assertEquals(3, rangeFreqQuery1.query(0, 2, 1));
28+
assertEquals(1, rangeFreqQuery1.query(3, 3, 2));
29+
assertEquals(1, rangeFreqQuery1.query(2, 2, 1));
30+
31+
rangeFreqQuery2 = new _2080.Solution2.RangeFreqQuery(new int[]{1, 1, 1, 2, 2});
32+
assertEquals(0, rangeFreqQuery2.query(0, 1, 2));
33+
assertEquals(3, rangeFreqQuery2.query(0, 2, 1));
34+
assertEquals(1, rangeFreqQuery2.query(3, 3, 2));
35+
assertEquals(1, rangeFreqQuery2.query(2, 2, 1));
2536
}
2637

2738
@Test
2839
public void test3() {
29-
rangeFreqQuery = new _2080.Solution1.RangeFreqQuery(new int[]{3, 4, 5, 3, 3, 2, 2, 2, 5, 4});
30-
// assertEquals(2, rangeFreqQuery.query(2, 6, 3));
31-
// assertEquals(0, rangeFreqQuery.query(5, 6, 5));
32-
// assertEquals(2, rangeFreqQuery.query(1, 6, 2));
33-
assertEquals(1, rangeFreqQuery.query(0, 2, 3));
34-
assertEquals(0, rangeFreqQuery.query(5, 6, 4));
40+
rangeFreqQuery1 = new _2080.Solution1.RangeFreqQuery(new int[]{3, 4, 5, 3, 3, 2, 2, 2, 5, 4});
41+
assertEquals(2, rangeFreqQuery1.query(2, 6, 3));
42+
assertEquals(0, rangeFreqQuery1.query(5, 6, 5));
43+
assertEquals(2, rangeFreqQuery1.query(1, 6, 2));
44+
assertEquals(1, rangeFreqQuery1.query(0, 2, 3));
45+
assertEquals(0, rangeFreqQuery1.query(5, 6, 4));
46+
47+
rangeFreqQuery2 = new _2080.Solution2.RangeFreqQuery(new int[]{3, 4, 5, 3, 3, 2, 2, 2, 5, 4});
48+
assertEquals(2, rangeFreqQuery2.query(2, 6, 3));
49+
assertEquals(0, rangeFreqQuery2.query(5, 6, 5));
50+
assertEquals(2, rangeFreqQuery2.query(1, 6, 2));
51+
assertEquals(1, rangeFreqQuery2.query(0, 2, 3));
52+
assertEquals(0, rangeFreqQuery2.query(5, 6, 4));
3553
}
3654

3755
}

0 commit comments

Comments
 (0)