698.数组的度

53 阅读1分钟

题目:
给定一个非空且只包含非负数的整数数组 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
}