连续子数组的最大和
来源:互联网 发布:上瘾网络剧类似的 编辑:程序博客网 时间:2024/06/04 19:09
/*
面试题31:连续子数组的最大和
:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组,求所有子数组的和的最大值。要求时间复杂度为O(n).
*/
/*
解题思路:1.例如一个数组{5,2,-10,7,2,-1},先初始化和为0,从第一个数字开始累加,此时的和就是第一个数字5,
2.此时再继续加,当加到第二个数字和为7,判断这个数字是否大于之前的和,如果大于,将最大值更新为7
3.继续加第三个数字,和为-3,此时需要判断和是否大于0,如果小于等于0,我们需要舍弃之前的和,现在-3<0,我们从7开始重新累加,此时最大值依旧为7.
4.7和2相加后和为9,于是将最大值更新为9,再继续加之后变为8,由于8小于9,于是我们返回值为9
*/
#include<iostream>using namespace std;#if 1int FindGreatestSumOfArray(int *pData,int nLength){ bool IsInvalidArr = false; //判断数组是否有效 if(pData == NULL ||nLength == 0) { IsInvalidArr == true; } int nCurnum = 0; int nGreatestSum = 0x80000000; for(int i = 0;i<nLength;i++) { //如果当前累加和小于0,则舍弃当前的和,从下一个数字开始。 if(nCurnum <=0) nCurnum = pData[i]; //否则的话一直累加 else nCurnum+=pData[i]; //此处需要每次更新累加和,保证最后得到的是最大的累加和 if(nCurnum >nGreatestSum) nGreatestSum = nCurnum; } return nGreatestSum;}int main(){ //int arr[] = {1,-2,3,10,-4,7,2,-5}; int arr[] = {5,2,-10,7,2,-1}; int length = sizeof(arr)/sizeof(int); int sum; sum = FindGreatestSumOfArray(arr,length); cout<<sum<<endl;}#endif
阅读全文
0 0
- 数组连续子数组的和最大
- 数组连续子数组的最大和
- 连续子数组的最大和
- 连续子数组的最大和
- 连续子数组的最大和
- 求连续子数组的最大和
- 连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 连续子数组的最大和
- 连续子数组的最大和
- (8)连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 连续子数组的最大和
- 求连续子数组的最大和
- 连续子数组的最大和
- 连续子数组的最大和
- Android:仿苹果按钮
- [Python] wxPython 编辑框组件学习总结 (原创)
- HDU
- java程序猿的日常(每天更新)
- 招聘面试的套路与原则
- 连续子数组的最大和
- float和double存储方式
- 数据结构 图
- js,jq生成json数据
- Linux下安装ffmpeg
- 配置篇 04. 硬盘分区 ❀ Windows Server 2016
- freeswitch配置之全局变量
- POJ 3628 Bookshelf 2
- Git与github基本操作