Problema de programación dinámica superclásico: suma máxima de suborden

      Dada una matriz de enteros  nums , busque una submatriz continua con la suma más grande (la submatriz contiene al menos un elemento) y devuelva la suma más grande.

      Ejemplo:

  输入: [-2,1,-3,4,-1,2,1,-5,4],

  输出: 6

  解释: 连续子数组 [4,-1,2,1] 的和最大,为 6

 

     Solución: planificación dinámica

    Ecuación de programación dinámica: dp [i] = max (dp [i-1] + nums [i], nums [i])

    Programación dinámica: defina dp [i] como nums [i] al final [suma máxima de subarreglos consecutivos]

    Al atravesar nums [i], necesitamos comparar nums [i] y dp [i-1] + nums [i] que es mayor, y luego tomar el valor mayor

func maxSubArray(nums []int) int {
    max := nums[0]
		
    for i := 1; i < len(nums); i++ {
        if nums[i] + nums[i-1] > nums[i] {
            nums[i] += nums[i-1]
        }
        if nums[i] > max {
            max = nums[i]
        }
    }
    return max
}

 

 

Dirección de referencia: https://leetcode-cn.com/problems/maximum-subarray/solution/zui-da-zi-xu-he-by-leetcode-solution/

Supongo que te gusta

Origin blog.csdn.net/ma2595162349/article/details/108866532
Recomendado
Clasificación