题解 | #最长的可整合子数组的长度#
最长的可整合子数组的长度
http://www.nowcoder.com/practice/677a21987e5d46f1a62cded9509a94f2
核心思想:当数组中无重复元素时,如果数组中最大值-最小值= 数组的长度-1,则此时子数组符合题意,我们只需要找出最大长度即可
package main
import (
"fmt"
)
func max(x, y int) int {
if x > y {
return x
}
return y
}
func min(x, y int) int {
if x > y {
return y
}
return x
}
func main() {
var N int
fmt.Scanln(&N)
arr := make([]int, N)
for i:=0; i<N; i++ {
fmt.Scan(&arr[i])
}
length, maxval, minval := 0, 0, 0
// 以i开头,以j结尾
for i:=0; i<N; i++ {
minval = int(^uint(0) >> 1)
maxval = -minval
hashMap := map[int]int{}
for j:=i; j<N; j++ {
if _, ok := hashMap[arr[j]]; ok {
break
}
hashMap[arr[j]] = 0
minval = min(arr[j], minval)
maxval = max(arr[j], maxval)
if j-i == maxval-minval {
length = max(length, j-i+1)
}
}
}
fmt.Println(length)
}