|
@@ -0,0 +1,31 @@
|
|
|
+func findShortestSubArray(nums []int) int {
|
|
|
+ n := len(nums)
|
|
|
+ if n <= 1 {
|
|
|
+ return n
|
|
|
+ }
|
|
|
+ max := 0
|
|
|
+ var freq [50000]int
|
|
|
+ ans := make([]int, 0)
|
|
|
+ var beg, end [50000]int
|
|
|
+ for i, v := range nums {
|
|
|
+ if freq[v] == 0 {
|
|
|
+ beg[v] = i
|
|
|
+ }
|
|
|
+ freq[v]++
|
|
|
+ if max < freq[v] {
|
|
|
+ max = freq[v]
|
|
|
+ ans = []int{v}
|
|
|
+ end[v] = i
|
|
|
+ } else if max == freq[v] {
|
|
|
+ ans = append(ans, v)
|
|
|
+ end[v] = i
|
|
|
+ }
|
|
|
+ }
|
|
|
+ max = n
|
|
|
+ for _, v := range ans {
|
|
|
+ if l := end[v] - beg[v] + 1; l < max {
|
|
|
+ max = l
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return max
|
|
|
+}
|