本次代码用最大子数组问题(可参考算法导论, 即寻找数组arr中和最大的非空连续子数组,时间复杂度为O(nlogn)。
package main
func findmaxcrossarr(arr []int, low, high, mid int) (int, int, int) {
leftsum, rightsum := 0, 0
leftindex, rightindex, temp := 0, 0, 0
for i := mid; i >= low; i-- {
temp = temp + arr[i]
if temp > leftsum {
leftsum = temp
leftindex = i
}
}
temp = 0
for i := mid + 1; i <= high; i++ {
temp = temp + arr[i]
if temp > rightsum {
rightsum = temp
rightindex = i
}
}
return leftindex, rightindex, (leftsum + rightsum)
}
func findmaxsubarr(arr []int, low, high int) (int, int, int) {
if low == high {
return low, high, arr[low]
} else {
mid := int((low + high) / 2)
leftlow, lefthigh, leftsum := findmaxsubarr(arr, low, mid)
rightlow, righthigh, rightsum :=