Skip to content

Commit 4a49f4c

Browse files
add a solution for 697
1 parent 533ddfa commit 4a49f4c

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

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

+30-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package com.fishercoder.solutions;
22

3-
import java.util.ArrayList;
4-
import java.util.Collections;
5-
import java.util.HashMap;
6-
import java.util.List;
7-
import java.util.Map;
3+
import java.util.*;
84

95
public class _697 {
106
public static class Solution1 {
@@ -77,4 +73,33 @@ public int findShortestSubArray(int[] nums) {
7773
return result;
7874
}
7975
}
76+
77+
public static class Solution3 {
78+
public int findShortestSubArray(int[] nums) {
79+
Map<Integer, Integer> frequencyMap = new HashMap<>();
80+
Map<Integer, List<Integer>> numberToIndicesMap = new HashMap<>();
81+
for (int i = 0; i < nums.length; i++) {
82+
frequencyMap.put(nums[i], frequencyMap.getOrDefault(nums[i], 0) + 1);
83+
List<Integer> indices = numberToIndicesMap.getOrDefault(nums[i], new ArrayList<>());
84+
indices.add(i);
85+
numberToIndicesMap.put(nums[i], indices);
86+
}
87+
int degree = 0;
88+
Set<Integer> numbersThatOccurTheMost = new HashSet<>();
89+
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
90+
degree = Math.max(degree, entry.getValue());
91+
}
92+
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
93+
if (entry.getValue() == degree) {
94+
numbersThatOccurTheMost.add(entry.getKey());
95+
}
96+
}
97+
int result = nums.length;
98+
for (int num : numbersThatOccurTheMost) {
99+
List<Integer> indices = numberToIndicesMap.get(num);
100+
result = Math.min(result, indices.get(indices.size() - 1) - indices.get(0) + 1);
101+
}
102+
return result;
103+
}
104+
}
80105
}

src/test/java/com/fishercoder/_697Test.java

+7
Original file line numberDiff line numberDiff line change
@@ -9,47 +9,54 @@
99
public class _697Test {
1010
private static _697.Solution1 solution1;
1111
private static _697.Solution2 solution2;
12+
private static _697.Solution3 solution3;
1213
private static int[] nums;
1314

1415
@BeforeClass
1516
public static void setup() {
1617
solution1 = new _697.Solution1();
1718
solution2 = new _697.Solution2();
19+
solution3 = new _697.Solution3();
1820
}
1921

2022
@Test
2123
public void test1() {
2224
nums = new int[]{1};
2325
assertEquals(1, solution1.findShortestSubArray(nums));
2426
assertEquals(1, solution2.findShortestSubArray(nums));
27+
assertEquals(1, solution3.findShortestSubArray(nums));
2528
}
2629

2730
@Test
2831
public void test2() {
2932
nums = new int[]{1, 2, 2, 3, 1};
3033
assertEquals(2, solution1.findShortestSubArray(nums));
3134
assertEquals(2, solution2.findShortestSubArray(nums));
35+
assertEquals(2, solution3.findShortestSubArray(nums));
3236
}
3337

3438
@Test
3539
public void test3() {
3640
nums = new int[]{1, 2, 2, 3, 1, 1};
3741
assertEquals(6, solution1.findShortestSubArray(nums));
3842
assertEquals(6, solution2.findShortestSubArray(nums));
43+
assertEquals(6, solution3.findShortestSubArray(nums));
3944
}
4045

4146
@Test
4247
public void test4() {
4348
nums = new int[]{1, 2, 2, 3, 1, 1, 5};
4449
assertEquals(6, solution1.findShortestSubArray(nums));
4550
assertEquals(6, solution2.findShortestSubArray(nums));
51+
assertEquals(6, solution3.findShortestSubArray(nums));
4652
}
4753

4854
@Test
4955
public void test5() {
5056
nums = new int[]{1, 2, 2, 3, 1, 4, 2};
5157
assertEquals(6, solution1.findShortestSubArray(nums));
5258
assertEquals(6, solution2.findShortestSubArray(nums));
59+
assertEquals(6, solution3.findShortestSubArray(nums));
5360
}
5461

5562
}

0 commit comments

Comments
 (0)