homework-01

1.程序的架构和思路

  对于一维数组的最大连续子数组问题,我想到的是算出每个子数组的大小然后再比较求出最大值,从而找出最大连续子数组。

2.程序心得

  若要求出每个子数组的大小,所付出的计算代价过于庞大,而子数组又都是连续的,所以可以使用上一次的计算结果来优化计算。即在每次循环中,用当前子数组和加上后一个数组元素来进行比较,这样可以减去一层循环。

3.时间消耗和开发效率分析

  程序开发所用时间约为一个小时,主要是算法的确定与实现。

  由于使用优化减去了一层循环,所以程序的时间复杂度为O(n2)。

4.程序运行结果 

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<stdlib.h>
#define _CRT_SECURE_NO_WARNINGS

int _tmain(int argc, _TCHAR* argv[])
{
    int n=0,a[10000],i=0,j=0,max=0,sum=0;
    scanf_s("%d",&n);
    for(i=0;i<n;i++)
        scanf_s("%d",&a[i]);
    max=a[0];//讲最大值先置为数组第一个数
    for(i=0;i<n;i++)
    {
        sum=0;
        for(j=i;j<n;j++)
        {
            sum=sum+a[j];//利用上一次结果来运算,可减少一层循环
            if(sum>max) max=sum;
        }
    }
    printf("%d",max);
    system("pause");
}

 

posted @ 2013-09-19 15:16  余明海  阅读(141)  评论(1编辑  收藏  举报