From f64b6029389019a2f2599b88078b940054e8be6c Mon Sep 17 00:00:00 2001 From: Sanders Lin <45224617+SandersLin@users.noreply.github.com> Date: Thu, 18 Jul 2019 00:12:24 +0800 Subject: [PATCH] Update max_sub_array.py (#1000) * Update max_sub_array.py added another method of computing maximum sum subarray * Update max_sub_array.py * Update max_sub_array.py --- dynamic_programming/max_sub_array.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/dynamic_programming/max_sub_array.py b/dynamic_programming/max_sub_array.py index 5d4888242..56983b7d2 100644 --- a/dynamic_programming/max_sub_array.py +++ b/dynamic_programming/max_sub_array.py @@ -2,7 +2,7 @@ author : Mayank Kumar Jha (mk9440) """ from __future__ import print_function - +from typing import List import time import matplotlib.pyplot as plt from random import randint @@ -37,7 +37,27 @@ def find_max_cross_sum(A,low,mid,high): right_sum=summ max_right=i return 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 = 0 + current = 0 + for i in nums: + current += i + if current < 0: + current = 0 + best = max(best, current) + return best if __name__=='__main__': inputs=[10,100,1000,10000,50000,100000,200000,300000,400000,500000]