zoukankan      html  css  js  c++  java
  • 求整数数组中的最大连续子数组之和

    一、要求:

      要求程序必须能处理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

  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/DreamerT/p/9786567.html
Copyright © 2011-2022 走看看