diff --git a/numerical/max_sub_array.go b/numerical/max_sub_array.go new file mode 100644 index 0000000..b6573a4 --- /dev/null +++ b/numerical/max_sub_array.go @@ -0,0 +1,28 @@ +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{-2, -5, 6, 0, -2, 0, -3, 1, 0, 5, -6} + fmt.Println("Maximum subarray sum: ", maxSubarray(array)) +}