Explorar o código

add 'Maximum Subarray'

tangs %!s(int64=5) %!d(string=hai) anos
pai
achega
623b50e2b4

+ 30 - 0
tags/array/maximumSubarray/main.go

@@ -0,0 +1,30 @@
+package main
+
+import "fmt"
+
+func main() {
+	var nums []int
+
+	nums = []int{-2, 1, -3, 4, -1, 2, 1, -5, 4}
+	fmt.Println(maxSubArray(nums))
+}
+func maxNum(a, b int) int {
+	if a > b {
+		return a
+	}
+	return b
+}
+
+func maxSubArray(nums []int) int {
+	var max = nums[0]
+	var sum = 0
+	for i := 0; i < len(nums); i++ {
+		if sum > 0 {
+			sum += nums[i]
+		} else {
+			sum = nums[i]
+		}
+		max = maxNum(max, sum)
+	}
+	return max
+}

+ 34 - 0
tags/array/maximumSubarray/main_optimize.go

@@ -0,0 +1,34 @@
+package main
+
+import "fmt"
+
+func main() {
+	var nums []int
+
+	nums = []int{-2, 1, -3, 4, -1, 2, 1, -5, 4}
+	fmt.Println(maxSubArray(nums))
+}
+
+func maxNum(a, b int) int {
+	if a > b {
+		return a
+	}
+	return b
+}
+
+func maxNums(nums []int) int {
+	var max = nums[0]
+	for i := 1; i < len(nums); i++ {
+		if nums[i] > max {
+			max = nums[i]
+		}
+	}
+	return max
+}
+
+func maxSubArray(nums []int) int {
+	for i := 1; i < len(nums); i++ {
+		nums[i] = nums[i] + maxNum(nums[i-1], 0)
+	}
+	return maxNums(nums)
+}