697.degree-of-an-array.go 493 B

12345678910111213141516171819202122232425262728293031
  1. func findShortestSubArray(nums []int) int {
  2. n := len(nums)
  3. if n <= 1 {
  4. return n
  5. }
  6. max := 0
  7. var freq [50000]int
  8. ans := make([]int, 0)
  9. var beg, end [50000]int
  10. for i, v := range nums {
  11. if freq[v] == 0 {
  12. beg[v] = i
  13. }
  14. freq[v]++
  15. if max < freq[v] {
  16. max = freq[v]
  17. ans = []int{v}
  18. end[v] = i
  19. } else if max == freq[v] {
  20. ans = append(ans, v)
  21. end[v] = i
  22. }
  23. }
  24. max = n
  25. for _, v := range ans {
  26. if l := end[v] - beg[v] + 1; l < max {
  27. max = l
  28. }
  29. }
  30. return max
  31. }