数组中最大和的子数组
来源:互联网 发布:php 判断整数 编辑:程序博客网 时间:2024/05/22 08:04
只需要输出最大子数组和结果
[08:27:34] gcc sonarrysum.c [08:27:37] ./a.out18[08:27:39] cat sonarrysum.c #include<stdio.h>void max(int a[],int len){ int i,max=0,count=0; for(i=0;i<len;i++)//在这里我们先不管数组全部为负数的情况,然后我们会得出只要累加结果小于0了,那就说明这个累加和不是最大的和(因为不全为负数就肯定是有正数了的不是) { count+=a[i]; if(count<0) count=0; if(count>max)//如果大于之前的最大值就覆盖 max=count; } if(max==0)//这里就是考虑全部为负数或者为0的情况 { max=a[0];//假定第一个数是最大的 for(i=1;i<len;i++)//如果后面的数有大于第一个数的就覆盖最大值 { if(a[i]>max) max=a[i]; } } printf("%d\n",max);}int main(){ int len,a[]={1,-2,3,10,-4,7,2,-5}; len=sizeof(a)/sizeof(a[1]); max(a,len); return 0;}[08:27:41]
如果我们需要连同输出下标,只需要增加几个语句就可以了
[08:59:56] gcc sonarrysum.c [08:59:58] ./a.outmax:36 start: 0 end: 2 11 12 13 [08:59:59] cat sonarrysum.c #include<stdio.h>void max(int a[],int len){ int i,max=0,count=0,start=0,maxstart=0,end=0; for(i=0;i<len;i++) { count+=a[i]; if(count<0) { count=0; start=i+1;//加1是因为a[i]这个数必定为负数,所以需要从下一个开始算 } if(count>max)//注意这里只有找到了当前最大和时才确定开始和结束下标,maxstart才是最终的开始下标 { max=count; end=i; maxstart=start; } } if(max==0) { max=a[0]; maxstart=end=0; for(i=1;i<len;i++) { if(a[i]>max) { max=a[i]; maxstart=end=i; } } } printf("max:%d start: %d end: %d \n",max,maxstart,end); for(i=maxstart;i<=end;i++) printf("%d ",a[i]); printf("\n");}int main(){ int len,a[]={11,12,13,-44,-1,0,2,3}; len=sizeof(a)/sizeof(a[1]); max(a,len); return 0;}[09:00:02]
阅读全文
0 0
- 数组中最大和的子数组
- 数组中最大和的子数组
- 数组中最大和的子数组
- 数组中最大和的子数组
- 数组中最大和的子数组
- 数组中最大和的子数组
- 数组中最大和的子序列
- 数组中连续子数组的和的最大和
- 数组中最大和子数组
- 求数组中连续子数组的最大和
- 求二维数组中最大子数组的和
- 求一个数组中连续子数组的最大和
- 求数组中最大连续子数组的和
- 【刷题剑指offer】数组中连续子数组的最大和
- 【C++】数组中连续子数组的最大和
- 子数组的最大和
- 子数组的最大和
- 子数组的最大和
- ssh: connect to host 127.0.0.1 port 2222: Connection refused
- Alpha-Beta
- js 设置css 无效
- java程序运行环境
- [机器学习入门] 李宏毅机器学习笔记-1(Learning Map 课程导览图)
- 数组中最大和的子数组
- windows下安装WGET
- windows设备停用启动杂记
- python安装第三方的包 工具对比
- 织梦实现数字序列表
- 富文本编辑器中的一些问题
- 1
- 2
- main方法详解