• 3.子数组的最大和[MaximumContinuousSubArray]


    题目】:

    输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值,要求时间复杂度为O(n)。

    例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。

    动态规划】:

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    /*
    see
    http://www.cppblog.com/jake1036/archive/2013/04/10/144726.html
    http://en.wikipedia.org/wiki/Maximum_subarray_problem
    f(i): max subsequence value ending at i
    f(i) = max(f(i-1)+a[i],a[i])
    max f(i) (i=0,...n-1)

    N=8
    -4 , 3 ,12 , -7 , 20 , -1 , -14 , 4

    3 ,12 , -7 , 20 ---> 28
    */


    int dp_forward()
    {
        
    // time o(n)
        // base case
        f[0] = a[0];
        
    int maxi = f[0];
        
    for (int i = 1; i < N; i++)
        {
            f[i] = max(f[i - 
    1] + a[i], a[i]);
            
    if (maxi < f[i])
            {
                maxi = f[i];
            }
        }
        
    return maxi;
    }

    int dp_forward2()
    {
        
    // base case
        int f = a[0];
        
    int maxi = a[0];
        
    for (int i = 1; i < N; i++)
        {
            
    //f= max(f+a[i],a[i]);
            if (f < 0)
            {
                f = a[i];
            }
            
    else
            {
                f += a[i];
            }

            
    if (maxi < f)
            {
                maxi = f;
            }
        }
        
    return maxi;
    }

    参考】:

    http://zhedahht.blog.163.com/blog/static/254111742007219147591/

    http://blog.csdn.net/v_JULY_v/article/details/6444021

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    深入admin之chang_list
    List<T>列表通用过滤模块设计
    Mysql行转换为列
    Linux中cp直接覆盖不提示的方法
    hibernate Restrictions 用法
    java.lang.OutOfMemoryError: PermGen space
    ruby+gem常用命令
    Linux查看CPU和内存使用情况
    在Ubuntu 9.04下配置Apache和ModPython
    有关查询和执行计划的DMV 从而明确那些SQL要优化
  • 原文地址:https://www.cnblogs.com/hellogiser/p/3738322.html
Copyright © 2020-2023  润新知