算法学习-连续子数组求和最大值
来源:互联网 发布:linux查看当前shell 编辑:程序博客网 时间:2024/05/20 07:19
1.最笨的办法-穷举法
思路就是,取出所有可能的子数组,即找出所有可能的0≤i≤j≤n,然后求出数组从i到j的所有数的和再对比,这样的方法时间复杂度较高,python实现如下:
class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ n=len(nums); ans = -100000000000; for i in range(0,n): for j in range(i,n): sums =sum(nums[i:j+1]); ans=max(ans,sums) return ans
提示超时,最终执行的输入如下:
此时的时间复杂度为O(n^3)
2.第一次优化:
这一步求和的时候,每次没有必要从i到j完整求和,只要存储了上一次求和的结果,之后只要在前面求和的基础上继续累加就可以。
具体方法就是,把sums=0在j循环之前声明,j进行循环时,每次求和是在前一次求和的基础上再加上num[j]:
class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ n=len(nums); ans = -100000000000; for i in range(0,n): sums = 0 for j in range(i,n): sums += nums[j]; ans=max(ans,sums) return ans
此时超时的结果为,有提升:
时间复杂度此时为O(n^2)
0 0
- 算法学习-连续子数组求和最大值
- 算法学习-连续子数组求和最大值
- 算法学习-连续子数组求和最大值
- 算法学习-连续子数组求和最大值
- 连续子数组求和
- 连续子数组求和
- 连续子数组求和
- 连续子数组求和
- 连续子数组求和
- 算法---数组中连续子数组和最大值
- 每日一算法:求连续子数组和的最大值
- 子数组连续和最大值
- LintCode : 连续子数组求和
- LintCode: 连续子数组求和
- lintcode,连续子数组求和
- 连续子数组求和-LintCode
- 算法学习-最大连续子数组
- 算法学习-数字连续的子数组
- cartographer开源代码的理解
- C语言itoa()函数和atoi()函数详解(整数转字符C实现)
- QT学习(五)QT之多线程
- 【hdoj_1085】Holding Bin-Laden Captive![母函数]
- 2017年软件测试就业前景趋势
- 算法学习-连续子数组求和最大值
- angular\reac\vue总结
- 统计学相关(网易公开课笔记)
- Eclipse导入项目Maven error “Failure to transfer…”
- 数据结构常考知识点
- IPC机制--使用Bundle进行通信
- 艾宾浩斯记忆遗忘曲线-背单词
- js自定义函数传值问题
- C++ 面向对象笔记