连续子数组的最大和
来源:互联网 发布:微信授权回调域名备案 编辑:程序博客网 时间:2024/06/04 23:46
题目:输入一个整形数组,数组里面有正数也有负数。数组中一个或连续的多个正数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度O(n)
解法一:根据数组的规律
从头到尾逐个累加数组中的每个数字。若累加后当前和为负数,则赋值当前和为下一个元素,否则,比较当前和与最大子数组和,若当前和更大则赋值最大子数组和为当前和。
/*输入一个整形数组,求连续子数组的最大和*/#include<iostream>#include<vector>using namespace std;bool g_InvalidInput = false;int FindMaxSumofSubArray(vector<int>& data){if(data.size() == 0){g_InvalidInput = true;return 0;}int curretSum = 0;int maxSum = data[0];for(int i = 0; i < data.size(); i++){if(curretSum < 0)curretSum = data[i];elsecurretSum += data[i];if(curretSum > maxSum)maxSum = curretSum;}return maxSum;}int main(){vector<int> data;int a[8]={1,-2,3,10,-4,7,2,-5};for(int i = 0;i < 8; i++)data.push_back(a[i]);cout<<FindMaxSumofSubArray(data)<<endl;return 0;}
用函数f(i)表示第i个数字结尾的子数组的最大和,那么我们需要求出max[f(i)]
则
f(i) = data[i] i = 0 或者 f(i-1) <=0
f(i) = f(i-1) + data[i] i != 0 并且 f(i-1) > 0
0 0
- 数组连续子数组的和最大
- 数组连续子数组的最大和
- 连续子数组的最大和
- 连续子数组的最大和
- 连续子数组的最大和
- 求连续子数组的最大和
- 连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 连续子数组的最大和
- 连续子数组的最大和
- (8)连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 连续子数组的最大和
- 求连续子数组的最大和
- 连续子数组的最大和
- 连续子数组的最大和
- Roope的Cocos2d-x学习之旅 000:纠结过后我终究还是选择了学习Cocosd-x
- 不一样的图片垂直居中
- 在Linux平台中调试C/C++内存泄漏方法 (腾讯和MTK面试的时候问到的)
- Toggle Buttons
- Spring MVC 中的基于注解的 Controller
- 连续子数组的最大和
- sd卡格式化后数据自动恢复需要具备什么软件
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
- FireBlue QN9020 QN9021 QN902x Proximity Reportor profile(防丢器) 之源码分析 (一) 开篇
- 连连看游戏设计
- 网上看到一个正方形和圆的渐变动态图片,发现再深度延伸一下,同样好看
- angularjs学习笔记之三(变量及过滤器Filter的使用)
- 迪祥丝网制品有限公司简介
- Linux使用du和df命令结果不一致