10
10
"""
11
11
12
12
13
- def longest_sub_array (arr : list ):
13
+ def longest_subarray (arr : list ):
14
14
"""
15
15
Find the longest continuous subarray with the maximum sum.
16
16
@@ -21,41 +21,37 @@ def longest_sub_array(arr: list):
21
21
A Integer which is the max subarray sum in the whole array.
22
22
23
23
Examples:
24
- >>> longest_sub_array ([1, 2, 3, 2, 5])
24
+ >>> longest_subarray ([1, 2, 3, 2, 5])
25
25
13
26
26
27
- >>> longest_sub_array ([5, -4, 3, -2, 1])
27
+ >>> longest_subarray ([5, -4, 3, -2, 1])
28
28
5
29
29
30
- >>> longest_sub_array ([1, 2, 3, -2, 5])
30
+ >>> longest_subarray ([1, 2, 3, -2, 5])
31
31
9
32
32
33
- >>> longest_sub_array ([10, 20, -30, 40, 50])
33
+ >>> longest_subarray ([10, 20, -30, 40, 50])
34
34
90
35
35
36
- >>> longest_sub_array ([])
36
+ >>> longest_subarray ([])
37
37
0
38
38
"""
39
39
40
- max_so_far = arr [0 ]
41
- max_ending_here = arr [0 ]
42
- max_len = 1
43
- curr_len = 1
40
+ if not arr :
41
+ return 0
42
+
43
+ max_sum = arr [0 ]
44
+ current_sum = arr [0 ]
44
45
45
46
for i in range (1 , len (arr )):
46
- if max_ending_here < 0 :
47
- max_ending_here = arr [i ]
48
- curr_len = 1
47
+ if arr [i ] > (current_sum + arr [i ]):
48
+ current_sum = arr [i ]
49
49
else :
50
- max_ending_here += arr [i ]
51
- curr_len += 1
52
- if max_ending_here > max_so_far :
53
- max_so_far = max_ending_here
54
- max_len = curr_len
55
- elif max_ending_here == max_so_far :
56
- max_len = max (max_len , curr_len )
57
-
58
- return max_len
50
+ current_sum += arr [i ]
51
+
52
+ max_sum = max (max_sum , current_sum )
53
+
54
+ return max_sum
59
55
60
56
61
57
if __name__ == "__main__" :
0 commit comments