package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型
*/
func FindGreatestSumOfSubArray( array []int ) int {
// write code here
// 直接动态规划
// dp[i] 代表到达当前下标的子数组最大和
// dp[0] = array[0]
// 递推表达式:判断是和之前子数组组合在一起的和更大,还是当前元素自己组成子数组更大
// -1 -1 2 对于第三个元素来说,它的最大子数组肯定是不需要前面那部分子数组的
// 1 1 2 对于第三个元素来说,它的最大子数组肯定是需要包含前面大部分子数组的
// dp[i] = max(dp[i-1]+array[i], array[i])
if len(array) == 0 {
return 0
}
dp := make([]int, len(array))
dp[0] = array[0]
ans := dp[0]
for i := 1; i < len(array); i++ {
dp[i] = max(dp[i-1]+array[i], array[i])
if dp[i] > ans {
ans = dp[i]
}
}
return ans
}
func max(a, b int) int {
if a < b {
return b
}
return a
}