Skip to content

Commit 84f33a5

Browse files
kadanes_algorithm for finding the maximum sum subarray with a twist
1 parent 27d66be commit 84f33a5

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

circular_kadne.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
def kadanes_algorithm(arr):
2+
"""Standard Kadane's Algorithm for maximum sum subarray."""
3+
max_ending_here = max_so_far = arr[0]
4+
5+
for num in arr[1:]:
6+
max_ending_here = max(num, max_ending_here + num)
7+
max_so_far = max(max_so_far, max_ending_here)
8+
9+
return max_so_far
10+
11+
def max_circular_subarray(arr):
12+
"""Kadane's Algorithm variation for circular arrays."""
13+
max_kadane = kadanes_algorithm(arr)
14+
15+
# Compute total array sum
16+
total_sum = sum(arr)
17+
18+
# Invert the array elements
19+
inverted_arr = [-x for x in arr]
20+
21+
# Find the maximum sum of the inverted array (minimum subarray sum)
22+
max_inverted_kadane = kadanes_algorithm(inverted_arr)
23+
24+
# The maximum circular sum is total_sum + max_inverted_kadane
25+
# If max_inverted_kadane is equal to total_sum, it means all elements are negative
26+
max_circular = total_sum + max_inverted_kadane if max_inverted_kadane != -total_sum else max_kadane
27+
28+
return max(max_kadane, max_circular)
29+
30+
# Example usage
31+
arr = [1, -2, 4, -3]
32+
print("Maximum sum subarray (circular):", max_circular_subarray(arr))

0 commit comments

Comments
 (0)