zoukankan      html  css  js  c++  java
  • 线性最大子数组的求法(二)

    1、题目:求一个数组的最大线性子数组

    2、常规求法

      这个方法相信大家都会想到,但是这个方法比较复杂,想法很简单,思路是:两层for循环遍历,从第一个元素开始一直累加后面的元素,找到最大的值赋给maxNum。

      这个方法的时间复杂度是O(n2),

    3、第二种方法就是动态规划,这个名字不太清楚,思路是:遍历这个数组,从第一个元素开始向后加,这个值为curNum,当这个curNum的值小于0的时候就不会再加了(因为curNum是负数的话,加后面的数就会比前面的数小,当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和),当这个值curNum比最大值maxNum大的时候就把curNum赋给maxNum。

      这个方法的时间复杂度是O(n),代码如下:

     1 /**
     2  * 求一个数组的最大线性子数组
     3  * @author lixiaochao
     4  *
     5  */
     6 public class MaxArray {
     7     
     8     public static void main(String[] args) {
     9         int[] a = new int[]{2,4,-7,5,2,-1,2,-4,3};
    10         int curSum = 0;   //中间态的值
    11         int maxSum = 0;   //这个数组的最大值
    12         int start= 1;     //起始位置
    13         int end = 0;      //末位置
    14         for(int i =0; i < a.length; i++){
    15             curSum += a[i];
    16             if(maxSum < curSum){
    17                 maxSum = curSum;
    18                 end = i+1;
    19             }
    20             System.out.println("curSum= "+curSum+", a[i]= "+a[i]+",start="+start);
    21             /*
    22              * 当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,
    23              * 那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和
    24              */
    25             if(curSum < 0){
    26                 curSum = 0;
    27                 start = i+2;
    28             }
    29         }
    30         System.out.println("最大值为:"+maxSum);
    31         System.out.println("开始位置为:"+start+",结束位置: "+end);
    32         
    33     }
    34     
    35 }

    以上是个人观点,有什么不对的地方,还请大家指正,

  • 相关阅读:
    React生命周期, 兄弟组件之间通信
    React组件式编程Demo-用户的增删改查
    React之this.refs, 实现数据双向绑定
    CCF CSP 201812-4 数据中心
    CCF CSP 201812-4 数据中心
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    Codeforces 1245C Constanze's Machine
    Codeforces 1245C Constanze's Machine
    CCF CSP 201712-4 行车路线
  • 原文地址:https://www.cnblogs.com/lixiaochao/p/5666522.html
Copyright © 2011-2022 走看看