最大连续子数组问题-homework-01

1)先写我的 github 的介绍:

github 的域名:http://www.github.com/zhuifeng1022

登入 github 大概是下面的视图:

按照助教的方法:我已经建好了代码仓库:命名为 homework-01

代码仓库 homework-01 域名: http://www.github.com/zhuifeng1022/homework-01

2)我选择的教材:中文版 代码大全 (第二版) 斯蒂夫·迈克康奈尔

代码大全

以下是第一次作业:

  我在课上想到的一种算法设计:

#include<stdio.h>
int max(int *a, int n)
{
    int i, j;
    int high, low;
    int max, sum;
    for (i = 0, max = 0; i < n; i++)
        max = max + a[i];
    sum=0;
    for (i = 0; i < n; i++)
    {
        for(j = 0;j < n; j++)
        {
            for(sum = 0, low = i, high = j; low <= high; low++)
            {
                sum = sum + a[low];
                if(sum > max)
                    max = sum;
            }
        }
    }
    return max;
}

int main()
{
    int a[999];
    int i, n;
    FILE *in;
    in = fopen("data.in", "r");
    fscanf(in, "%d", &n);
    for (i = 0; i < n; i++)
        fscanf(in, "%d", &a[i]);
    printf("%d
", max(a, n));
    fclose(in);
    return 0;
  
}

课后经过和同学的讨论,我又实现了另外一种O(n)的算法:

#include<stdio.h>
int max(int *a, int n)
{
    int i;
    int max, sum;
    for (i = 0; i < n; i++) 
    {
        if (a[i] < max)
            max = a[i];
    }
    sum = 0;
    for (i = 0; i < n; i++) 
    {
        sum += a[i];
        if(sum > max)
            max = sum;
        if (sum < 0)
            sum = 0;
    }
    return max;
}

int main()
{
    int a[999];
    int i, n;
    FILE *in;
    in = fopen("data.in", "r");
    fscanf(in, "%d", &n);
    for (i = 0; i < n; i++)
        fscanf(in, "%d", &a[i]);
    printf("%d
", max(a, n));
    fclose(in);
}
原文地址:https://www.cnblogs.com/jun1022/p/3330119.html