diff --git a/numerical/max_sub_array.go b/numerical/max_sub_array.go new file mode 100644 index 0000000..aaf80db --- /dev/null +++ b/numerical/max_sub_array.go @@ -0,0 +1,31 @@ +package numerical + +import ( + "fmt" +) + +/* O(n) solution for calculating maximum subarray sum. */ +func Max(x int, y int) int { + if x < y { + return y + } + return x +} + +func maxSubarray(array []int) int { + var currentMax int = 0 + var maxTillNow int = 0 + for _, v := range array { + currentMax = Max(v, currentMax+v) + maxTillNow = Max(maxTillNow, currentMax) + } + return maxTillNow +} + +func main() { + array := []int{-3, -4, 7, 1, -2, 0, -5, 1, 0, 6, -5} + fmt.Println("Maximum subarray sum: ", maxSubarray(array)) + + array = []int{3, 4, -7, 2, 0, 0, -3, -1, 0, -5, 7} + fmt.Println("Maximum subarray sum: ", maxSubarray(array)) +}