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

      本篇博客介绍第二周课上小测:求数组中最大子数组的和,使用C++实现。

    代码:

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5 
     6     int a[100],i,n;
     7     //确定数组长度
     8     cin>>n;
     9     //输入数组元素
    10     for(i=1;i<=n;i++)
    11         cin>>a[i];
    12     //以子数组中的尾数为指针进行判断
    13     for(i=2;i<=n;i++)
    14     {
    15         //如果该数与前一个数相加大于该数,此位置替换为和,证明“并入”子数组
    16         if(a[i]+a[i-1]>a[i])
    17             a[i]=a[i]+a[i-1];
    18     }
    19     int ans=-100000;
    20     //再次遍历,最大值即为最大子数组的和
    21     for(i=1;i<=n;i++)
    22         ans=max(ans,a[i]);
    23     cout<<ans<<endl;
    24     return 0;
    25 }

    求最大子数组和的要点在于动态规划,只要理解其意就能写出代码。

    接下来改变了题目要求,数组变为循环数组,再求出最大子数组的和。解决思路:循环数组需要循环遍历,这里就令输入的长度为n的数组输入两次形成一个长度为2n的新数组,从头开始遍历(实现“循环”),再设置int变量k记录子数组的长度,如果该子数组的长度k>=n,则下一次计算时不进行相加验证操作,而是重新计算(子数组长度无法大于数组长度),最后进行遍历得出最大子数组和。代码如下:

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5 
     6     int a[100], i, j, n, k = 1;
     7     cin >> n;
     8     //构成2n数组
     9     for (i = 1; i <= n; i++)
    10     {
    11         cin >> a[i];
    12         a[i + n] = a[i];
    13     }
    14     //计算子数组和
    15     for (i = 2; i <= 2*n; i++)
    16     {
    17         if (k < n)
    18         {
    19             if (a[i] + a[i - 1] > a[i])
    20             {
    21                 a[i] = a[i] + a[i - 1];
    22                 k++;
    23             }
    24             //若和不大于该数,证明不能连接成子数组
    25             else
    26                 k = 1;
    27         }
    28         //若k>=n,则证明该子数组已经饱和,不能再加
    29         else
    30         {
    31             k = 1;
    32             continue;
    33         }
    34     }
    35     int ans = -100000;
    36     //遍历求出最大子数组和
    37     for (i = 1; i <= 2*n; i++)
    38     {
    39         if (a[i] > ans)
    40             ans = a[i];
    41     }
    42     cout << ans << endl;
    43     return 0;
    44 }
  • 相关阅读:
    解决多版本sdk兼容问题
    ios5 UIKit新特性
    iPhone网络编程–一起来做网站客户端(一)
    八数码
    IOS开发中编码转换
    修复ipa图片png方法
    创建易读链接 搭建应用通往App Store的桥梁
    如何让IOS应用从容地崩溃
    详解IOS IAP
    jquery创建并行对象或者叫合并对象
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/12378685.html
Copyright © 2011-2022 走看看