zoukankan      html  css  js  c++  java
  • 数组01

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

    要求:

      1、 输入一个整形数组,数组里有正数也有负数。

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

      3、 求所有子数组的和的最大值。要求时间复杂度为O(n)

    设计思想:

      核心算法:动态规划。

      刚开始的时候并没有找到合适的算法,只能够设置数组的长度为特定的数值,然后每一种情况都考虑到,但是对于很大的数值来说,就无法实现了,直到找到了动态规划方法,然后才解决了核心的算法问题,时间复杂度为O(n)满足题目需求。

    源代码: 

     1 //数组1
     2 //胡浩特、朱子嘉 2016/3/21
     3 
     4 #include<iostream>
     5 using namespace std;
     6 
     7 int MaxSum3(int a[], int n){//优化方案 时间O(n) 空间  O(1)
     8     //int A,N;
     9     int nStart = a[n - 1];
    10     int nAll = a[n - 1];
    11     for (int i = n - 2; i >= 0; i--)
    12     {
    13         if (nStart<0)
    14             nStart = 0;
    15             nStart += a[i];
    16         if (nStart>nAll)
    17             nAll = nStart;
    18     }
    19     return nAll;
    20 }
    21 int main()
    22 {
    23 
    24     int i, length;
    25     cout << "请输入数组长度:";
    26     cin >> length;
    27     int a[50];
    28     cout << "请输入数组值:";
    29 
    30     for (i = 0; i < length; i++)
    31     {
    32         cin >> a[i];
    33     }
    34     
    35 
    36     cout<<MaxSum3(a, length)<<endl;
    37     return 0;
    38 }

    结果截图:

      三组测试数据:

      1、都为正数,最大值为数组之和。

      

      2、都为负数,结果为最大的负数。

      

      3、有正数有负数还有有0。

      

    实验总结:

      整个实验的关键在于算法的实现,对于这个问题来说有三种合适的算法,但是只有动态规划才满足时间复杂度的要求。通过查找资料和自己研究才找到合适的算法。对于我来说,实验很简单但是还是花费了不少的努力。这一次实验是一个新的开始,希望自己可以做好数组的一系列的实验。

  • 相关阅读:
    appcan封装好的ajax,解决onDATA覆盖问题
    待研究
    mysql主从实验
    jQuery动态加载JS以减少服务器压力
    HTTP协议详解
    企业站收藏
    Linux查看程序端口占用情况
    大流量网站优化
    营销类网站
    Nginx (简体中文)
  • 原文地址:https://www.cnblogs.com/JYQ-hu/p/5313171.html
Copyright © 2011-2022 走看看