zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和

    要求:
      1.要求程序必须能处理1000 个元素;
      2.每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况;
      3.输入一个整形数组,数组里有正数也有负数。
      4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
      5.求所有子数组的和的最大值。要求时间复杂度为O(n)。
    实现代码:
    #include "stdafx.h"
    #include "stdlib.h"
    int a[1000] = { 0 };
    int _tmain(int argc, _TCHAR* argv[]) { int a[1000] = { 0 };
    for (int i = 0; i < 1000; i++)
      {
        a[i] = rand() % 10000 - 5000;
      }
    for (int j = 0; j < 999; j++)
      {
        printf("%d ", a[j]);
       }
    //计算连续最大子数组
    int maxsum = 0;
    int nowsum = 0;
    int x;
    for (int k = 0; k <1000; k++)
       {
         nowsum += a[k];
         x = nowsum;
         if (a[k +1] > 2147483647 - x)
           {
            printf("超出范围");
            maxsum = maxsum + a[k + 1];
            printf("%d", k+1);
            break;
            }
         else
           {
             if (nowsum > maxsum)
               {
                 maxsum = nowsum;
               }
        else if (nowsum < 0)
                {
                 nowsum = 0;
              }
           }
       }
    printf(" 结果是 "); printf("%d ", maxsum);
    return 0;
    }
    如果随机生成的的数字长度超过int类型的最大值,会显示“常量太大”。
    if (a[k +1] > 2147483647 - x)
      {
        printf("超出范围");
        maxsum = maxsum + a[k + 1];
        printf("%d", k+1);
        break;
      },此语句判断数字的大小,如果超出,输出“超出范围”,并计算之前的最大子数组的和。
    最终显示数据超出之前最大子数组的和。
    最后附上两个人一起编程时的照片:
  • 相关阅读:
    Oracle查看正在执行的存储过程的sid---转
    使用WITH子句重用子查询
    oracle解决显示数据的层次问题--实现数据缩进
    oracle9i、10g、11g区别 --转
    oracle10g安装在裸设备上
    在Linux系统上面创建使用裸设备的数据库
    监控Oracle数据库的常用shell脚本-转
    sql server使用维护计划定时备份完整数据库、差异数据库
    使用Advanced Installer14.3 简单打包windows窗体应用程序
    SVG Path标签 A 参数
  • 原文地址:https://www.cnblogs.com/njzy123456/p/9786566.html
Copyright © 2011-2022 走看看