• 求整数数组中的最大连续子数组之和


    一、要求:

      要求程序必须能处理1000个元素;

      每个元素是int32类型,出现子数组之和大于整形表示的范围会出现什么情况?

      输入一个整形数组,数组里有正数也有负数;

      数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

      求所有子数组的和的最大值,要求时间复杂度为O(n#include"stdafx.h"

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int MAX(int a, int b)//定义最大值函数
    {
        if (a > b)
        {
            return a;
        }
        else
        {
            return b;
        }
    }
    int main(void)
    {
        srand((unsigned)time(NULL)); //本地时间为种子
        int n;
        printf("please enter the number of arrays
    ");
        scanf_s("%d", &n);//输入数组的长度n
        int *a = (int *)malloc(sizeof(int)*n);//定义任意长度的数组int i;
        for (i = 0; i < n; i++)
        {
            a[i] = rand() % 20000-10000;//随机生成数组
            printf("%d ", a[i]);
        }
        printf("
    ");
        int maxsum=a[0];
        int sum = 0;
        for (i = 0; i < n; ++i)
        {
            if (sum < 0)
            {
                sum = a[i];
            }
            else
            {
                sum += a[i];
            }
            maxsum = MAX(maxsum, sum);
        }
        printf("maxsum=%d", maxsum);
        getchar();
        getchar();
        return 0;
    }

    出现子数组之和大于整形表示的范围时,计算的最后结果一直为整形范围的最大值即2147478255。

    因为要求时间复杂度为O(n),所以采用的是线性算法。

    三、程序运行结果:

    1、运算结果超出整数表示最大范围

    2、数组长度为1000时的运行结果

    同组人:林梦颖

      2018-10-14

  • 相关阅读:
    MySQL数据库的安装与密码配置
    Java 的设计模式之一装饰者模式
    Java中Eclipse的使用
    Java的学习之路
    Java学习笔记(06)
    Java学习笔记(05)
    Java学习笔记(04)
    mysql出现2003——can't connect to mysql server on localhost(10061)
    抢票难。
    java 的接口起什么作用
  • 原文地址:https://www.cnblogs.com/DreamerT/p/9786567.html
Copyright © 2020-2023  润新知