From c18442cc01c5e43d0a9b3328284765220712a56f Mon Sep 17 00:00:00 2001 From: ridwanfathin Date: Mon, 12 Oct 2020 08:26:46 +0700 Subject: [PATCH 1/2] Add Max subArray --- numerical/max_sub_array.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 numerical/max_sub_array.go 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)) +} From 0bcd28f8e59cdedcd26a633b3c2cafdd94c3f19f Mon Sep 17 00:00:00 2001 From: ridwanfathin Date: Mon, 12 Oct 2020 08:30:09 +0700 Subject: [PATCH 2/2] add test case --- numerical/max_sub_array.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/numerical/max_sub_array.go b/numerical/max_sub_array.go index b6573a4..aaf80db 100644 --- a/numerical/max_sub_array.go +++ b/numerical/max_sub_array.go @@ -23,6 +23,9 @@ func maxSubarray(array []int) int { } func main() { - array := []int{-2, -5, 6, 0, -2, 0, -3, 1, 0, 5, -6} + 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)) }