• 求最大子列和的几种方法


        给出一个数组a[]与数组长度N,求该数组中最大子列和。(子列由数组中连续的元素组成)

    int MaxSubseqSum1(int a[], int N)   //O(n^3)
    {
        int MaxSum = 0;
        for (int i = 0; i < N; i++)    //i为子列左边界
        {
            for (int j = i; j < N; j++)    //j为子列右边界
            {
                int TempSum = 0;
                for (int k = i; k <= j; k++)    //遍历子列内的元素
                {
                    TempSum += a[k];
                }
                if ( TempSum > MaxSum )
                {
                    MaxSum = TempSum;
                }
            }
        }
        return MaxSum;
    }
    
    int MaxSubseqSum2(int a[], int N)  //O(n^2)
    {
        int MaxSum = 0;
        for (int i = 0; i < N; i++)
        {
            int TempSum = 0;
            for (int j = i; j < N; j++)
            {
                TempSum += a[j];
                if (TempSum > MaxSum)
                {
                    MaxSum = TempSum;
                }
            }
        }
        return MaxSum;
    }
    
    int MaxSubseqSum3(int a[], int N)    //O(N)
    {
        int MaxSum, TempSum;
        MaxSum = TempSum = 0;
        for (int i = 0; i < N; i++)
        {
            TempSum += a[i];
            if ( TempSum > MaxSum )
            {
                MaxSum = TempSum;
            }
            else if ( TempSum < 0 )    //关键:如果当前子列和为负,则不可能使后面的部分和增大,因此可舍弃
            {
                TempSum = 0;
            }
        }
        return MaxSum;
    }
  • 相关阅读:
    17 盒子模型
    16 input默认样式清除
    15 组合选择器
    14 CSS权重深入
    13 CSS样式权重问题
    12 子代选择器和后代选择器
    11 CSS的三种引入方式和基本选择器
    10 table标签
    NOIP1998拼数
    NOIP1998车站
  • 原文地址:https://www.cnblogs.com/liangchao/p/4273243.html
Copyright © 2020-2023  润新知