"""author : Mayank Kumar Jha (mk9440)"""from __future__ import print_functionfrom typing import Listimport timeimport matplotlib.pyplot as pltfrom random import randintdef 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 (can be empty array)which has the largest sum and return its sum.>>> max_sub_array([-2,1,-3,4,-1,2,1,-5,4])6>>> max_sub_array([])0>>> max_sub_array([-1,-2,-3])0"""best = 0current = 0for i in nums:current += iif current < 0:current = 0best = max(best, current)return bestif __name__=='__main__':inputs=[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()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。