首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法: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
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券