python练习-连续子数组最大和

连续子数组最大和

  • 题目描述
  • 做题思路
  • python代码实现

题目描述

输入n+1行,第一行为一个正整数n(1≤n),下面n行为n个整数,构成一个整形数组(可能有正数和负数),求该数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。

做题思路

常见思路:
循环遍历数组a,max初始值为a[0],sum=sum+a[i],当sum>max时,将sum赋值给max;每一次循环结束后将sum置为数组中下一个数;这样的时间复杂度为O(n*n)
时间复杂度为O(n)思路:
循环遍历数组a,sum、max初始值为a[0],sum=getMax(sum+a[i], a[i]),然后比较sum与max大小。

python代码实现

# -*- coding:utf-8 -*-

def getMax(a, b):
    if a > b:
        return a
    else:
        return b

num = int(input())
a = []
for i in range(num):
    a.append(int(input()))
sum = a[0]
max = a[0]
for i in a[1:]:
    sum = getMax(sum + i, i)
    max = getMax(sum, max)
print(max)      

你可能感兴趣的:(python练习,python,动态规划)