-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmaximum_subarray.go
69 lines (51 loc) · 1.02 KB
/
maximum_subarray.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package algorithm
func maxSubArray(nums []int) int {
if len(nums)==0{
return -2147483648
}
if len(nums)==1{
return nums[0]
}
return findSum(nums,0,len(nums)-1)
}
func findSum(nums [] int, start int, end int) int{
if(start==end){
return nums[start]
}
mid:=(start+end)/2
lss:=findSum(nums,start,mid)
rss:=findSum(nums,mid+1,end)
css:=findCss(nums,start,end,mid)
if lss>rss{
if lss>css{
return lss
}else{
return css
}
}else{
if(rss>css){
return rss
}else{
return css
}
}
}
func findCss(nums [] int, start int, end int,mid int) int{
tempSumOfLeftArr:=0
tempSumOfRightArr:=0
sumOfLeftArr:=0
sumOfRightArr:=0
for i:=mid;i>=start;i--{
tempSumOfLeftArr=tempSumOfLeftArr+nums[i]
if(sumOfLeftArr<tempSumOfLeftArr || sumOfLeftArr==0){
sumOfLeftArr=tempSumOfLeftArr
}
}
for i:=mid+1;i<=end;i++{
tempSumOfRightArr=tempSumOfRightArr+nums[i]
if(sumOfRightArr<tempSumOfRightArr || sumOfRightArr==0){
sumOfRightArr=tempSumOfRightArr
}
}
return sumOfLeftArr+sumOfRightArr
}