第二次课上带电脑喽-----求整数数组子数组的最大和
2014-03-10 19:06
141 查看
队友:迟真真
这次软件工程课堂上,建民老师又让我们结对编程(其实,还挺好玩的,虽然自己编程不怎滴,不过这种教学方法真的很好呢!),进入主题......
题目如下:求一个整型数组的最大子数组的和
一拿到题目,真真和我就开始吧嗒吧嗒地讨论,好像没有头绪,你一言我一语思路就来了:
思路1:
定义一个max,定义一个整数元素数组。先求出相邻元素为一个元素时的最大值赋给max;
再相邻元素为2个元素时的最大值赋给max;
相邻元素为3个元素时的最大值赋给max;
相邻元素为4个元素时的最大值赋给max;
。。。
课上并没有调试出结果,课下调试正确。
代码:
还有一种算法,思路大致相同:
思路2:
a[0]
a[0]+a[1]
a[0]+a[1]+a[2]
……
a[0]+a[1]+a[2]+……a[n-1]
a[1]
a[1]+a[2]
a[1]+a[2]+a[3]
………
a[1]+ a[2]+a[3]+……..a[n-1]
a[2]
a[2]+a[3]
a[2]+a[3]+a[4]
………..
a[2]+a[3]+a[4]+……a[n-1]
………..
以此类推:
a[i]
a[i]+a[i+1]
…….
a[i]+a[i+1]………a[n-i]
因此可以找到规律,然后用3个for循环语句。
但是考虑到时间空间复杂度,这种方法貌似不太好
可以先比较出和的最大值,把这些和的最大值放在一个数组中,然后再求这个数组的最大值。
下面还有一种类似的算法,她是先把单个元素的子数组单另出来求得:
代码:
结对编程,很能锻炼合作能力,交流能力,培养和队友的默契。
这次软件工程课堂上,建民老师又让我们结对编程(其实,还挺好玩的,虽然自己编程不怎滴,不过这种教学方法真的很好呢!),进入主题......
题目如下:求一个整型数组的最大子数组的和
一拿到题目,真真和我就开始吧嗒吧嗒地讨论,好像没有头绪,你一言我一语思路就来了:
思路1:
定义一个max,定义一个整数元素数组。先求出相邻元素为一个元素时的最大值赋给max;
再相邻元素为2个元素时的最大值赋给max;
相邻元素为3个元素时的最大值赋给max;
相邻元素为4个元素时的最大值赋给max;
。。。
课上并没有调试出结果,课下调试正确。
代码:
#include<stdio.h> #define M 100 void main() { int a[M]; int i,j,N; int m=0,max=0; int n; printf("输入数组个数 "); scanf("%d",&n); N=n-1; printf("输入数组元素 "); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) //比较一个元素时的最大值 { if(a[i]>max) { max=a[i]; } } while(N>0) //比较相邻2,3。。n个相邻元素时的最大值 { for(i=0;i<N;i++) { m=0; for(j=0;j<=(n-N);j++) //计算相邻的(n-N+1)的和,赋给m { m=m+a[i+j]; } if(m>max) { max=m; } } N--; } printf("最大为:%d\n",max); }
还有一种算法,思路大致相同:
思路2:
a[0]
a[0]+a[1]
a[0]+a[1]+a[2]
……
a[0]+a[1]+a[2]+……a[n-1]
a[1]
a[1]+a[2]
a[1]+a[2]+a[3]
………
a[1]+ a[2]+a[3]+……..a[n-1]
a[2]
a[2]+a[3]
a[2]+a[3]+a[4]
………..
a[2]+a[3]+a[4]+……a[n-1]
………..
以此类推:
a[i]
a[i]+a[i+1]
…….
a[i]+a[i+1]………a[n-i]
因此可以找到规律,然后用3个for循环语句。
但是考虑到时间空间复杂度,这种方法貌似不太好
可以先比较出和的最大值,把这些和的最大值放在一个数组中,然后再求这个数组的最大值。
下面还有一种类似的算法,她是先把单个元素的子数组单另出来求得:
代码:
#include<stdio.h> void main() { int a[100]; int i,j,n; int k; int m=0,max; printf("请输入数组元素的个数:"); scanf("%d",&n); printf("请输入数组元素:"); for(i=0;i<n;i++) scanf("%d",&a[i]); max=a[0]; for(i=0;i<n;i++) { for(j=i;j<n;j++) { m=0; for(k=i;k<=j;k++) { m=m+a[k]; } if(m>max) { max=m; } } } printf("最大子数组的和为:%d\n",max); }
结对编程,很能锻炼合作能力,交流能力,培养和队友的默契。
相关文章推荐
- 给定一个由非负整数和整数m组成的数组,可以将该数组分成m个非空的连续子数组。 写一个算法来最小化这些m个子阵列之间的最大和。
- 返回一个整数数组中最大子数组的和(升级版)
- 课堂练习-返回一个整数数组中最大子数组的和
- 结对开发——返回整数数组最大子数组和2
- 返回一个二维整数数组中最大子数组的和(头尾相接)
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- 返回一个整数数组中最大子数组的和
- 返回一个二维整数数组中最大联通子数组的和
- 返回一个二维整数数组的最大联通子数组的和
- 返回一个首尾相接的二维整数数组中最大子数组的和
- 返回一个首尾相接的二维整数数组中最大子数组的和
- 返回一个整数数组中最大子数组的和2
- 实验 6 数组1题目1、输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标
- 对两个正整数a1,a2,则不能由这两个数组和成的数最大不超过a1*a2
- 一个无序整数数组,数组元素大于5个,请用一种高效的算法找出其中最大的5个值.
- 一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
- 《返回一个整数数组中最大子数组的和》
- 返回一个整数数组中最大子数组的和
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值