NC41 最长无重复子数组
    image.png

    1. func maxLength( arr []int ) int {
    2. maxLen := 0
    3. len := 0
    4. left := -1
    5. valueMap := make(map[int]int)
    6. for idx, a := range arr {
    7. if valueIdx, ok := valueMap[a]; !ok || valueMap[a] == -1 {
    8. len++
    9. } else {
    10. if valueIdx > left {
    11. left = valueIdx
    12. }
    13. len = idx - left
    14. }
    15. valueMap[a] = idx
    16. if maxLen < len {
    17. maxLen = len
    18. }
    19. }
    20. return maxLen
    21. }
    //好像答案不对
    func maxLength(nums []int) int {
      if len(nums)==0 {
          return 0
      }
    
      max, start:= 0, 0
      hash := map[int]int{}
    
      for end := 0; end < len(nums); end++{
          if hash[nums[end]] != 0 {
             start = Max(start, hash[nums[end]]+1)     
          }                                     //历史最大值,因为可能新的重复索引要小于start,更新成重复的索引下一个
           hash[nums[end]] = end
           max = Max(max, end-start+1)
      }
      return max
    }