求子数组的最大和
来源:互联网 发布:淘宝清理图片空间 编辑:程序博客网 时间:2024/06/06 04:43
#include<stdio.h>
#include<stdlib.h>
bool maxSubarray(int data[], int size,int &max)
{
if (size<=0)
{
printf("error array size\n");
return false;
}
int sum = 0, maxElement=-(1<<31);
max=0;
for(int i=0;i<size;i++)
{
if(data[i]>maxElement)
maxElement=data[i];
sum +=data[i];
if(sum>max)
{
max=sum;
}
else if(sum<0)
{
sum=0;
}
}
if(max==0)//all negative elements
max=maxElement;
return true;
}
int main()
{
int data[]={1, -2, 3, 10, -4, 7, 2, -5};
int max;
if( maxSubarray(data,8,max))
printf("%d\n",max);
int data2[]={-1, -2, -3, -10, -4, -7, -2, -5};
if( maxSubarray(data2,8,max) )
printf("%d\n",max);
getchar();
return 0;
}
这个看代码挺简单的,不过自己想的时候又把简单问题复杂化了,自己又递归又循环的最后还是没解决出来,接受不了,因为我觉的在递加的过程会出现数字小于零则保留原来最大数,数字不小于零但小于原来最大值,所以递归进去看看会怎样,数字不小于零而直接大于原来最大值,则直接修改原值。
不过看了源代码才醒悟啊。。。。。。。。。我笨死了
直接保留可能的最大值,再用另一个变量从头加到尾部,每次与最大值比较,如果大了,则修改,如果没大,则不变
- 求数组最大子数组的和
- 求子数组的最大和
- 面试---求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 2.求子数组的最大和
- 3.求子数组的最大和
- 求子数组的最大和
- 3、求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- live555学习2
- 软件破解简单上手 OllyDbg调试器应用
- 选择排序
- 主机PPPOE拨号VMWARE虚拟机在三种模式下上网
- Linux Socket编程(不限Linux)
- 求子数组的最大和
- 自定义导出按钮
- 个人博客-http://witmax.cn
- 代理模式
- 使用Mingw编译wxWidgets的Dos命令
- HDOJ2055 An easy problem
- ubuntu useradd与adduser的用法详解
- 集体编程智慧(2)
- 关于String s1 = new String("abc") 创建一个对象问题和Java常量池总结