def SubarrayWithMaxSum(nums):
# Initialize currMax and globalMax
# with first value of nums
currMax = nums[0]
globalMax = nums[0]
# Iterate for all the elements
# of the array
for i in range(1, len(nums)):
# Update currMax
currMax = max(nums[i], nums[i] + currMax)
# Check if currMax is greater
# than globalMax
if (currMax > globalMax):
globalMax = currMax
endIndex = i
startIndex = endIndex
curGlobalMax = globalMax
# Traverse in left direction to
# find start Index of subarray
while (startIndex >= 0):
curGlobalMax -= nums[startIndex]
if (curGlobalMax == 0):
break
# Decrement the start index
startIndex -= 1
return globalMax, startIndex, endIndex
# Given array arr[]
def printArray(nums, startIndex, endIndex):
for i in range(startIndex, endIndex + 1):
print(nums[i], end = " ")
nums = [-86, 43, -45, 68, -21]
maxSum, maxStart, maxEnd = SubarrayWithMaxSum(nums)
invSum, invStart, invEnd = SubarrayWithMaxSum([-num for num in nums])
if (maxSum > invSum):
printArray(nums, maxStart, maxEnd)
else:
printArray(nums, invStart, invEnd)
ZGVmIFN1YmFycmF5V2l0aE1heFN1bShudW1zKToKCiAgICAjIEluaXRpYWxpemUgY3Vyck1heCBhbmQgZ2xvYmFsTWF4CiAgICAjIHdpdGggZmlyc3QgdmFsdWUgb2YgbnVtcwogICAgY3Vyck1heCA9IG51bXNbMF0KICAgIGdsb2JhbE1heCA9IG51bXNbMF0KCiAgICAjIEl0ZXJhdGUgZm9yIGFsbCB0aGUgZWxlbWVudHMKICAgICMgb2YgdGhlIGFycmF5CiAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4obnVtcykpOgogICAgICAgIAogICAgICAgICMgVXBkYXRlIGN1cnJNYXgKICAgICAgICBjdXJyTWF4ID0gbWF4KG51bXNbaV0sIG51bXNbaV0gKyBjdXJyTWF4KQogICAgICAgIAogICAgICAgICMgQ2hlY2sgaWYgY3Vyck1heCBpcyBncmVhdGVyCiAgICAgICAgIyB0aGFuIGdsb2JhbE1heAogICAgICAgIGlmIChjdXJyTWF4ID4gZ2xvYmFsTWF4KToKICAgICAgICAgICAgZ2xvYmFsTWF4ID0gY3Vyck1heAogICAgICAgICAgICBlbmRJbmRleCA9IGkKCiAgICBzdGFydEluZGV4ID0gZW5kSW5kZXgKICAgIAogICAgY3VyR2xvYmFsTWF4ID0gZ2xvYmFsTWF4CiAgICAjIFRyYXZlcnNlIGluIGxlZnQgZGlyZWN0aW9uIHRvCiAgICAjIGZpbmQgc3RhcnQgSW5kZXggb2Ygc3ViYXJyYXkKICAgIHdoaWxlIChzdGFydEluZGV4ID49IDApOgogICAgICAgIGN1ckdsb2JhbE1heCAtPSBudW1zW3N0YXJ0SW5kZXhdCiAgICAgICAgCiAgICAgICAgaWYgKGN1ckdsb2JhbE1heCA9PSAwKToKICAgICAgICAgICAgYnJlYWsKICAgICAgICAKICAgICAgICAjIERlY3JlbWVudCB0aGUgc3RhcnQgaW5kZXgKICAgICAgICBzdGFydEluZGV4IC09IDEKICAgIAogICAgcmV0dXJuIGdsb2JhbE1heCwgc3RhcnRJbmRleCwgZW5kSW5kZXgKCiMgR2l2ZW4gYXJyYXkgYXJyW10KZGVmIHByaW50QXJyYXkobnVtcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpOgogICAgZm9yIGkgaW4gcmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggKyAxKToKICAgICAgICBwcmludChudW1zW2ldLCBlbmQgPSAiICIpCiAKbnVtcyA9IFstODYsIDQzLCAtNDUsIDY4LCAtMjFdCm1heFN1bSwgbWF4U3RhcnQsIG1heEVuZCA9IFN1YmFycmF5V2l0aE1heFN1bShudW1zKQppbnZTdW0sIGludlN0YXJ0LCBpbnZFbmQgPSBTdWJhcnJheVdpdGhNYXhTdW0oWy1udW0gZm9yIG51bSBpbiBudW1zXSkKaWYgKG1heFN1bSA+IGludlN1bSk6CiAgICBwcmludEFycmF5KG51bXMsIG1heFN0YXJ0LCBtYXhFbmQpCmVsc2U6CiAgICBwcmludEFycmF5KG51bXMsIGludlN0YXJ0LCBpbnZFbmQp