算法:41.最大子数组

https://lintcode.com/problem/maximum-subarray/description

描述

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。

子数组最少包含一个数

样例

给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6.

挑战

要求时间复杂度为O(n)

思路

从穷举所有子数组并求和开始,逐渐优化,实现的过程也是理解的过程,有时候并不能一下想到最优的算法,但是看着代码从代码结构等方面可能想到优化的方法。

代码

第一版,使用了递归。

第二版,消除了递归。

第三版,使用空间换时间。O(n)的时间复杂度,O(n)的空间复杂度。达成挑战目标。

小结

第一版的实现是4月3号写的,时隔三月重做才想明白怎么优化。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180729G1BGF400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券