forked from lazzzis/LeetCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
38 lines (34 loc) · 704 Bytes
/
Copy pathmain.go
File metadata and controls
38 lines (34 loc) · 704 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import "sort"
type Unit struct {
index int
val int
}
func findShortestSubArray(nums []int) int {
arr := []Unit{}
for i, v := range nums {
arr = append(arr, Unit{
i, v,
})
}
sort.Slice(arr, func(i, j int) bool {
if arr[i].val == arr[j].val {
return arr[i].index < arr[j].index
}
return arr[i].val < arr[j].val
})
i, j := 0, 0
maxCnt, minLen := 0, len(nums)
for i < len(nums) {
for j < len(nums) && arr[i].val == arr[j].val {
j += 1
}
if maxCnt < j-i {
maxCnt = j - i
minLen = arr[j-1].index - arr[i].index + 1
} else if maxCnt == j-i && minLen > arr[j-1].index-arr[i].index+1 {
minLen = arr[j-1].index - arr[i].index + 1
}
i = j
}
return minLen
}