Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 223ea6e

Browse files
add 2080
1 parent 4366dd6 commit 223ea6e

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ _If you like this project, please leave me a star._ ★
88

99
| # | Title | Solutions | Video | Difficulty | Tag
1010
|-----|----------------|---------------|--------|-------------|-------------
11+
|2080|[Range Frequency Queries](https://leetcode.com/problems/range-frequency-queries/)|[Java](../master/src/main/java/com/fishercoder/solutions/_2080.java) ||Medium|Array, Binary Seaarch|
1112
|2079|[Watering Plants](https://leetcode.com/problems/watering-plants/)|[Java](../master/src/main/java/com/fishercoder/solutions/_2079.java) ||Medium||
1213
|2078|[Two Furthest Houses With Different Colors](https://leetcode.com/problems/two-furthest-houses-with-different-colors/)|[Java](../master/src/main/java/com/fishercoder/solutions/_2078.java) ||Easy||
1314
|2076|[Process Restricted Friend Requests](https://leetcode.com/problems/process-restricted-friend-requests/)|[Java](../master/src/main/java/com/fishercoder/solutions/_2076.java) ||Hard||
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.fishercoder.solutions;
2+
3+
import java.util.*;
4+
5+
public class _2080 {
6+
public static class Solution1 {
7+
8+
public static class RangeFreqQuery {
9+
/**
10+
* This post explains it well: https://leetcode.com/problems/range-frequency-queries/discuss/1589019/Java-or-Binary-Search-or-Log(n)-for-every-query
11+
*/
12+
13+
Map<Integer, List<Integer>> map;
14+
15+
public RangeFreqQuery(int[] arr) {
16+
map = new HashMap<>();
17+
for (int i = 0; i < arr.length; i++) {
18+
List<Integer> list = map.getOrDefault(arr[i], new ArrayList<>());
19+
list.add(i);
20+
map.put(arr[i], list);
21+
}
22+
}
23+
24+
public int query(int left, int right, int value) {
25+
List<Integer> list = map.getOrDefault(value, new ArrayList<>());
26+
int start = Collections.binarySearch(list, left);
27+
int end = Collections.binarySearch(list, right);
28+
if (start < 0) {
29+
start = (start + 1) * -1;
30+
}
31+
if (end < 0) {
32+
end = (end + 2) * -1;
33+
}
34+
return end - start + 1;
35+
}
36+
}
37+
}
38+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.fishercoder;
2+
3+
import com.fishercoder.solutions._2080;
4+
import org.junit.Test;
5+
6+
import static org.junit.Assert.assertEquals;
7+
8+
public class _2080Test {
9+
private static _2080.Solution1.RangeFreqQuery rangeFreqQuery;
10+
11+
@Test
12+
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));
16+
}
17+
18+
@Test
19+
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+
}
26+
27+
@Test
28+
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));
35+
}
36+
37+
}

0 commit comments

Comments
 (0)