11package main
22
33// import "fmt"
4-
5- func maxSubArray (nums []int ) int {
6- max := nums [0 ]
7- m := make ([]int , len (nums ))
8- for i , v := range nums {
9- if i == 0 || m [i - 1 ] < 0 {
10- m [i ] = v
11- } else if m [i - 1 ]+ v < 0 {
12- m [i ] = v
13- } else {
14- m [i ] = m [i - 1 ] + v
15- }
16- if m [i ] > max {
17- max = m [i ]
18- }
19- }
20- return max
21- }
22-
23- func maxSubArray_Conquer (nums []int , left bool ) (int , int ) {
24- if len (nums ) == 1 {
25- // fmt.Println(nums, nums[0], nums[0], left)
26- return nums [0 ], nums [0 ]
27- }
28- lmax , lmid := maxSubArray_Conquer (nums [:len (nums )/ 2 ], true )
29- rmax , rmid := maxSubArray_Conquer (nums [len (nums )/ 2 :], false )
30- max := lmid + rmid
31- if lmax > max {
32- max = lmax
33- }
34- if rmax > max {
35- max = rmax
36- }
37- var mid int
38- if left {
39- var tmp int
40- mid = nums [len (nums )- 1 ]
41- for i := len (nums ) - 1 ; i >= 0 ; i -- {
42- tmp += nums [i ]
43- if tmp > mid {
44- mid = tmp
45- }
46- }
47- } else {
48- var tmp int
49- mid = nums [0 ]
50- for i := 0 ; i < len (nums ); i ++ {
51- tmp += nums [i ]
52- if tmp > mid {
53- mid = tmp
4+ import "math"
5+
6+ func maxSubArray_Foolish (nums []int ) int {
7+ max := - math .MaxInt64
8+ for i := 0 ; i < len (nums ); i ++ {
9+ sum := 0
10+ for j := i ; j < len (nums ); j ++ {
11+ sum += nums [j ]
12+ if sum > max {
13+ max = sum
5414 }
5515 }
5616 }
57-
58- // fmt.Println(nums, max, mid, left)
59- return max , mid
60- }
61-
62- func maxSubArray_Divide (nums []int ) int {
63- max , _ := maxSubArray_Conquer (nums , true )
6417 return max
6518}
6619
@@ -73,15 +26,4 @@ func main() {
7326 println (maxSubArray ([]int {- 1 , 1 , 2 , 3 , - 1 }))
7427 println (maxSubArray ([]int {- 2 , - 3 , - 1 }))
7528 println (maxSubArray ([]int {8 , - 19 , 5 , - 4 , 20 }))
76-
77- println ("------------" )
78-
79- println (maxSubArray_Divide ([]int {- 2 , 1 , - 3 , 4 , - 1 , 2 , 1 , - 5 , 4 }))
80- println (maxSubArray_Divide ([]int {- 1 , - 1 , - 1 , - 1 }))
81- println (maxSubArray_Divide ([]int {1 }))
82- println (maxSubArray_Divide ([]int {1 , 2 , 3 }))
83- println (maxSubArray_Divide ([]int {1 , 2 , 3 , - 1 }))
84- println (maxSubArray_Divide ([]int {- 1 , 1 , 2 , 3 , - 1 }))
85- println (maxSubArray_Divide ([]int {- 2 , - 3 , - 1 }))
86- println (maxSubArray_Divide ([]int {8 , - 19 , 5 , - 4 , 20 }))
8729}
0 commit comments