Skip to content

Latest commit

 

History

History
31 lines (31 loc) · 1.08 KB

697.md

File metadata and controls

31 lines (31 loc) · 1.08 KB

Degree of an Array

解法一

func findShortestSubArray(nums []int) int {
    // 使用两个map来寻找这个值,
    // 首先map1 是计算的len长度,map2 是计算的首次出现的index
    Count,minLength := make(map[int]int),make(map[int]int)
    l := len(nums)
    maxLen := 1
    if l < 2 { // 边界判断。
		return l
	}
    for i,v := range nums {
        Count[v]++ // 是计算各个v的出现次数的
        if Count[v] == 1 { // 记录第一次出现的i
            minLength[v] = i
        }else {
            dd :=  i - minLength[v] + 1 // 然后每次都记录长度
            if maxLen < Count[v] || maxLen == Count[v] && l > dd {
                l = dd // 这个l就是一个记录index差的的指针。
                maxLen = Count[v] // 这个maxlen就是总长度最大的指针。
                // 这是两个必不可少的指针。 这里就是一边遍历一边比较。
            }
        }
    }
    if len(Count) == len(nums) { // 当没有重复的时候返回1,因为map的len等于这个num了嘛。
        return 1
    }
    return l
}