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;
      },此语句判断数字的大小,如果超出,输出“超出范围”,并计算之前的最大子数组的和。
    最终显示数据超出之前最大子数组的和。
    最后附上两个人一起编程时的照片:
  • 相关阅读:
    VUE动画Javascript钩子不生效问题记录
    vue-resource
    shell脚本 回顾 小练习
    mysql 回顾小练习
    jvm调优(二)
    jvm调优(一)
    性能调优笔记(二)
    性能调优笔记(一)
    mac 下 配置appium +ios真机环境
    pycharm中 unittests in xxxx 运行模式
  • 原文地址:https://www.cnblogs.com/njzy123456/p/9786566.html
Copyright © 2011-2022 走看看