题解 | #最长的可整合子数组的长度#go解法
最长的可整合子数组的长度
http://www.nowcoder.com/practice/677a21987e5d46f1a62cded9509a94f2
package main
//输入描述:
//第一行一个整数N,表示数组长度
//第二行N个整数,分别表示数组内的元素
//输出描述:
//输出一个整数,表示最大可整合子数组的长度
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
var (
N int
inputArr []int
)
input := bufio.NewScanner(os.Stdin)
input.Scan() //读取第一行
N, _ = strconv.Atoi(input.Text())
inputArr = make([]int, N)
input.Scan()
intBuffer := strings.Split(input.Text(), " ") //整体读取第二行
for i := 0; i < N; i++ {
inputArr[i], _ = strconv.Atoi(intBuffer[i])
}
fmt.Println(getLIL(inputArr))
}
func getLIL(arr []int) int {
res := 0
if len(arr) <= 1 {
return len(arr)
}
for i := 0; i < len(arr); i++ {
hm := map[int]int{}
max, min := arr[i], arr[i]
for j := i; j < len(arr); j++ {
if _, ok := hm[arr[j]]; ok {
break
}
hm[arr[i]]++
max = Max(max, arr[j])
min = Min(min, arr[j])
if max-min == j-i {
res = Max(res, j-i+1)
}
}
}
return res
}
//判断是否为最长可整合子数组
func Max(i, j int) int {
if i < j {
return j
}
return i
}
func Min(i, j int) int {
if i < j {
return i
}
return j
}