给定一个无序数组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 }