Para agregar:
divide y vencerás
El método que implementé es un algoritmo de programación dinámica
con complejidad O (n). Entre ellos, vale la pena señalar que el
subproblema f (i) se define como el subarreglo más grande y continuo que termina con el número i-ésimo (a [i]). Y
dado que esta matriz debe ser continua con un [i-1], también debe ser adyacente al subconjunto más grande y continuo que termina con un [i-1],
por lo que la ecuación de transición de estado satisface
f (i) = f (i- 1) + a [i] si f (i-1)> 0 más a [i], i> = 1
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
if nums == []:
return 0
length = len(nums)
if length == 1:
return nums[0]
#本解法中,动态规划的状态转移方程f(i)
#代表以a(i)为结尾的最大和连续子数组
res = nums[0]
maxa = res
for i in range(length-1):
tempindex = i + 1#nums[tempindex]代表新考察的数字
if res >= 0:
res += nums[tempindex]
elif res < 0:
res = nums[tempindex]
if res > maxa:
maxa = res
return maxa