NC41 最长无重复子数组
func maxLength( arr []int ) int {
maxLen := 0
len := 0
left := -1
valueMap := make(map[int]int)
for idx, a := range arr {
if valueIdx, ok := valueMap[a]; !ok || valueMap[a] == -1 {
len++
} else {
if valueIdx > left {
left = valueIdx
}
len = idx - left
}
valueMap[a] = idx
if maxLen < len {
maxLen = len
}
}
return maxLen
}
//好像答案不对
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
}