zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和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 }

     

    验证截图:

    总结:

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

     

     

  • 相关阅读:
    Tomcat解压war包错误
    排序规则
    JSONArray中按字段排序
    Spring Boot中使用Java线程池ExecutorService
    Vert X 干法总结
    MySQL数据库表分区功能详解
    Kubernetes概念,架构,运行一个pod流程
    Java代理模式
    virtualbox下设置虚拟机与主机互通且虚拟机可联网的方法
    entos 如何查看操作系统是哪个版本
  • 原文地址:https://www.cnblogs.com/messi2017/p/8349751.html
Copyright © 2011-2022 走看看