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号写的,时隔三月重做才想明白怎么优化。
领取专属 10元无门槛券
私享最新 技术干货