题目:
给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。
你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。
算法:
还以为有说明取巧的办法,老老实实算。
func findShortestSubArray(nums []int) int {
ans := 500000
count := 0
// 这里如果定义成map[int][3]int,在对m[nums[i]][2],m[nums[i]][0]赋值时会有问题
m := make(map[int][]int) // [3]{count, left, right}
for i := range nums {
if _, ok := m[nums[i]]; ok {
m[nums[i]][0] = m[nums[i]][0] + 1
m[nums[i]][2] = i
} else {
m[nums[i]] = []int{1, i, i}
}
if m[nums[i]][0] > count {
count = m[nums[i]][0]
}
}
for _, array := range m {
if array[0] == count && array[2] - array[1] + 1 < ans {
ans = array[2] - array[1] + 1
}
}
return ans
}