题解 | #连续子数组的最大和#

连续子数组的最大和

http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484

【剑指offer】连续子数组的最大和(python)

  1. python初始化整数的最大值和最小值
    图片说明

这是聪明法,这个sum的设置,想不到

# -*- coding:utf-8 -*-
import sys
class Solution:
    def FindGreatestSumOfSubArray(self, array):
        # write code here
        if not array: return 0
        sum = 0
        maxSum = -sys.maxint -1
        for i in array:
            sum = i if sum <=0 else sum+i
            maxSum = max(maxSum, sum)
        return maxSum
  1. 用动规,暴力解
    状态定义:dp[i]表示以第i个数字结尾的连续子数组的最大和。
    状态转移方程:dp[i] = max(array[i], dp[i-1]+array[i])。如果当前元素为整数,并且dp[i-1]为负数,负数越加越小,结果就是只选当前元素。
    技巧:这里为了统一代码的书写,定义dp[i]表示前i个元素的连续子数组的最大和,结尾元素为array[i-1]
# -*- coding:utf-8 -*-
import sys
class Solution:
    def FindGreatestSumOfSubArray(self, array):
        # write code here
        if not array: return 0
        length = len(array)
        dp = [1 for i in range(length+1)]
        dp[0] = 0
        ret = array[0]
        for i in range(1, length+1):
            dp[i] = max(array[i-1], dp[i-1]+array[i-1])
            ret = max(ret, dp[i])
        return ret
全部评论

相关推荐

美团 后端开发 总包n(15%是股票)
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务