Skip to content

Commit

Permalink
Merge pull request #761 from mahletseyoum101/kadanes_algorithm
Browse files Browse the repository at this point in the history
kadanes_algorithm
  • Loading branch information
gantavyamalviya authored Dec 26, 2024
2 parents 9063354 + 84f33a5 commit 600747f
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions circular_kadne.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
def kadanes_algorithm(arr):
"""Standard Kadane's Algorithm for maximum sum subarray."""
max_ending_here = max_so_far = arr[0]

for num in arr[1:]:
max_ending_here = max(num, max_ending_here + num)
max_so_far = max(max_so_far, max_ending_here)

return max_so_far

def max_circular_subarray(arr):
"""Kadane's Algorithm variation for circular arrays."""
max_kadane = kadanes_algorithm(arr)

# Compute total array sum
total_sum = sum(arr)

# Invert the array elements
inverted_arr = [-x for x in arr]

# Find the maximum sum of the inverted array (minimum subarray sum)
max_inverted_kadane = kadanes_algorithm(inverted_arr)

# The maximum circular sum is total_sum + max_inverted_kadane
# If max_inverted_kadane is equal to total_sum, it means all elements are negative
max_circular = total_sum + max_inverted_kadane if max_inverted_kadane != -total_sum else max_kadane

return max(max_kadane, max_circular)

# Example usage
arr = [1, -2, 4, -3]
print("Maximum sum subarray (circular):", max_circular_subarray(arr))

0 comments on commit 600747f

Please sign in to comment.