给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k,求arr所有子数组中累加和为k的最长子数组长度
package main
import (
"fmt"
)
func main() {
var (
n int
k int
num int
)
fmt.Scan(&n,&k)
arr := make([]int,n)
for i:=0;i<n;i++ {
fmt.Scan(&num)
arr[i] = num
}
result := getMaxLength(arr,k)
fmt.Printf("%d\n",result)
}
func getMaxLength(arr []int, k int) int {
if len(arr) == 0 {
return 0
}
length, sum := 0, 0
m := make(map[int]int)
//初始化位置
m[0] = -1
for i :=0;i<len(arr);i++ {
sum += arr[i]
if v,ok := m[sum-k];ok {
length = max(length,i-v)
}
if _,ok := m[sum]; !ok {
m[sum] = i
}
}
return length
}
func max(a,b int) int {
if a>b {
return a
}
return b
}