func maxsumofSubarray(arr []int) int {
// 负数过滤
L, R := 0, len(arr)-1
for arr[L] <= 0 {
L++
}
for arr[R] <= 0 {
R--
}
// 当前累加和数组
sum := make([]int, R-L+1)
sum[0] = arr[L]
for i := L + 1; i <= R; i++ {
sum[i-L] = arr[i] + sum[i-L-1]
}
max := sum[len(sum)-1]
tmp := max
// 两侧压缩 贪心
for L != R {
if arr[L] > arr[R] {
tmp = tmp - arr[R]
R--
} else if arr[L] < arr[R] {
tmp = tmp - arr[L]
L++
} else {
m, n := L, R
for m != n && arr[m] == arr[n] {
if m+1 == n {
break
}
m++
n--
}
if arr[m] > arr[n] {
tmp = tmp - arr[R]
R--
} else {
tmp = tmp - arr[L]
L++
}
}
if tmp > max {
max = tmp
}
}
return max
}