This action will force synchronization from 编程语言算法集/Python, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
"""author : Mayank Kumar Jha (mk9440)"""from __future__ import annotationsdef find_max_sub_array(A, low, high):if low == high:return low, high, A[low]else:mid = (low + high) // 2left_low, left_high, left_sum = find_max_sub_array(A, low, mid)right_low, right_high, right_sum = find_max_sub_array(A, mid + 1, high)cross_left, cross_right, cross_sum = find_max_cross_sum(A, low, mid, high)if left_sum >= right_sum and left_sum >= cross_sum:return left_low, left_high, left_sumelif right_sum >= left_sum and right_sum >= cross_sum:return right_low, right_high, right_sumelse:return cross_left, cross_right, cross_sumdef find_max_cross_sum(A, low, mid, high):left_sum, max_left = -999999999, -1right_sum, max_right = -999999999, -1summ = 0for i in range(mid, low - 1, -1):summ += A[i]if summ > left_sum:left_sum = summmax_left = isumm = 0for i in range(mid + 1, high + 1):summ += A[i]if summ > right_sum:right_sum = summmax_right = ireturn max_left, max_right, (left_sum + right_sum)def max_sub_array(nums: list[int]) -> int:"""Finds the contiguous subarray which has the largest sum and return its sum.>>> max_sub_array([-2, 1, -3, 4, -1, 2, 1, -5, 4])6An empty (sub)array has sum 0.>>> max_sub_array([])0If all elements are negative, the largest subarray would be the empty array,having the sum 0.>>> max_sub_array([-1, -2, -3])0>>> max_sub_array([5, -2, -3])5>>> max_sub_array([31, -41, 59, 26, -53, 58, 97, -93, -23, 84])187"""best = 0current = 0for i in nums:current += iif current < 0:current = 0best = max(best, current)return bestif __name__ == "__main__":"""A random simulation of this algorithm."""import timefrom random import randintfrom matplotlib import pyplot as pltinputs = [10, 100, 1000, 10000, 50000, 100000, 200000, 300000, 400000, 500000]tim = []for i in inputs:li = [randint(1, i) for j in range(i)]strt = time.time()(find_max_sub_array(li, 0, len(li) - 1))end = time.time()tim.append(end - strt)print("No of Inputs Time Taken")for i in range(len(inputs)):print(inputs[i], "\t\t", tim[i])plt.plot(inputs, tim)plt.xlabel("Number of Inputs")plt.ylabel("Time taken in seconds ")plt.show()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。