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

    题目:返回一个整数数组中最大子数组的和

    要求:
    要求程序必须能处理1000 个元素;
    每个元素是int32 类型的;
    输入一个整形数组,数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    求所有子数组的和的最大值。要求时间复杂度为O(n)。 
     
    在做前面一道题目时,并没有考虑数组个数的上限及随机数位数问题,以为是要程序不出错,就是完美的。而通过课堂上验证上次程序,发现数组的和超过某一值时,将不会显示,但同样,程序不会报错,在小程序中后果并不严重,但是一旦开发大型软件,极有可能造成不可弥补的错误和经济上的损失。
     
    以下为超过上限截图:
    题目要求实现代码:
     1 #include<iostream>
     2 #include<string>
     3 #include<ctime>
     4 #define N 1000
     5 using namespace std;
     6 
     7 int MaxSum(int *arr, int size)
     8 {
     9     int MaxSum = 0;
    10     int b = 0;//b是子数组的和
    11 
    12     for (int i = 0; i < size; i++)
    13     {
    14         if (b < 0)
    15             b = arr[i];//当子数组和小于0时,且无论与后面数组如何相加,和肯定小于后一段数组之和,此时,将b重新赋值,置为下一个元素
    16         else
    17             b += arr[i];
    18         if (MaxSum < b)
    19             MaxSum = b;
    20     }
    21     return MaxSum;
    22 }
    23 
    24 int main()
    25 {
    26     int arr[N];
    27     srand(time(0));
    28     for (int j = 0; j < N; j++)
    29     {
    30         arr[j] = rand() % 1000-500;
    31         cout << arr[j] << " ";
    32 
    33     }
    34     cout <<"最大子数组的和为:"<< MaxSum(arr, N) << endl;
    35     return 0;
    36 }

    感悟:在编程的时候不仅仅是完成任务目标就可以,更应该考虑该程序的应用范围,继而进行优化

  • 相关阅读:
    迷宫广搜
    通过地址获取百度地图经纬度
    图片上传存储数据库
    spring boot加载配置文件的顺序
    阿里 短信认证
    spring boot properties文件与yaml文件的区别
    springboot pom问题及注解
    手机短信认证
    获取class对象的三种方法以及通过Class对象获取某个类中变量,方法,访问成员
    关于mysql优化问题
  • 原文地址:https://www.cnblogs.com/SanShaoS/p/4386609.html
Copyright © 2011-2022 走看看