"""Kadane's algorithm to get maximum subarray sumhttps://medium.com/@rsinghal757/kadanes-algorithm-dynamic-programming-how-and-why-does-it-work-3fd8849ed73dhttps://en.wikipedia.org/wiki/Maximum_subarray_problem"""test_data: tuple = ([-2, -8, -9], [2, 8, 9], [-1, 0, 1], [0, 0], [])def negative_exist(arr: list) -> int:""">>> negative_exist([-2,-8,-9])-2>>> [negative_exist(arr) for arr in test_data][-2, 0, 0, 0, 0]"""arr = arr or [0]max = arr[0]for i in arr:if i >= 0:return 0elif max <= i:max = ireturn maxdef kadanes(arr: list) -> int:"""If negative_exist() returns 0 than this function will executeelse it will return the value return by negative_exist functionFor example: arr = [2, 3, -9, 8, -2]Initially we set value of max_sum to 0 and max_till_element to 0 than whenmax_sum is less than max_till particular element it will assign that value tomax_sum and when value of max_till_sum is less than 0 it will assign 0 to iand after that whole process, return the max_sumSo the output for above arr is 8>>> kadanes([2, 3, -9, 8, -2])8>>> [kadanes(arr) for arr in test_data][-2, 19, 1, 0, 0]"""max_sum = negative_exist(arr)if max_sum < 0:return max_summax_sum = 0max_till_element = 0for i in arr:max_till_element += iif max_sum <= max_till_element:max_sum = max_till_elementif max_till_element < 0:max_till_element = 0return max_sumif __name__ == "__main__":try:print("Enter integer values sepatated by spaces")arr = [int(x) for x in input().split()]print(f"Maximum subarray sum of {arr} is {kadanes(arr)}")except ValueError:print("Please enter integer values.")
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。