• 返回一个整数数组中最大子数组的和2


     

    要求:

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

    一维数组首尾相接,象个一条首尾相接带子一样。

    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。时间复杂度O(n)

     

    思路分析:

    先说点题外话,课上那两种方法我感觉没一个对的。

    这个题其实和上回那个题基本一样,只不过这回把这个一维数组连成环了。不过仍然是求最大子数组的和,首尾相接的。说实话循环两次说起来容易做起来不好控制。不妨换个思路,想想看,上次求了个不是首尾相接的最大值,这回干脆按照上回的思路求个最小值,再用整个数组的和减去这个最小值就搞定了。具体求非首尾相接子数组最小和的思路不再细讲,直接上代码。

     

     

     1 int main(){
     2     system("title 08返回一个整数数组中最大子数组的和");
     3     cout << "数字要求:必须有正数和负数同时存在,可以有0" << endl;
     4     int len = 0;
     5     cout << "输入数组长度:";
     6     cin >> len;
     7     int*a = new int[len];
     8     cout << "输入" << len << "个数字:";
     9     for (int i = 0; i < len; ++i)
    10         cin >> a[i];
    11     int sum = 0;
    12     int sum1 = 0;
    13     int min = a[0];
    14     for (int i = 0; i < len; ++i){
    15         sum1 += a[i];
    16         if (sum + a[i] >= 0)sum = 0;
    17         else sum += a[i];
    18         min = min<sum ? min : sum;
    19     }
    20     cout << "最大子数组的和:"<<sum1 - min << endl;
    21     return 0;
    22 }

     

    验证截图:

    总结:

    还是关于贪心算法的问题,不过这次拐了个弯儿。

     

     

  • 相关阅读:
    MySQL字符串中数字排序的问题
    Jquery 实现跨域处理
    mysql中insert into select from的使用
    Mysql索引会失效的几种情况分析(转)
    ASP.Net Web API 输出缓存(转)
    8 种提升 ASP.NET Web API 性能的方法 (转)
    C#进阶系列——WebApi 异常处理解决方案(转)
    C#使用Log4Net记录日志(转)
    前端传递对象列表到WebApi
    忏悔录
  • 原文地址:https://www.cnblogs.com/messi2017/p/8349751.html
Copyright © 2020-2023  润新知