美文网首页
数据结构之---求最大字段和, 时间复杂度o(n)算法

数据结构之---求最大字段和, 时间复杂度o(n)算法

作者: 刘翾 | 来源:发表于2017-11-08 21:24 被阅读79次

问题描述

采用动态规划策略设计并实现算法,求解最大子段和及最大子段和的起始下标和终止下标,要求算法的时间复杂性不超过O(n)。

最大子段和问题

给定由n个整数(可能为负整数)组成的序列a1, a2,…, an, 求该序列形如 的子段和的最大值。当所有整数均为负整数时定义其最大子段和为0。依次定义,所求的最优值为

例如

当(a1,a2, a3, a4,a5,a6)= (-2,11,-4,13,-5,-2)时,最大子段和为 = 20,起始下标为2,终止下标为4。

下面这个程序时间复杂度极低为o(n)

#include<iostream>

using namespace std;

int MaxSum(int n, int a[], int &l, int &r)
{
    int sum=0, b=0, i=0, bestI=0, bestJ=0;
    for(int j = 1; j <= n; j++)
    {
        if(b > 0)
        {
            b += a[j];
        }
        else
        {
            b = a[j]; i = j;
        }

        if(b > sum)
        {
            sum = b; bestI = i; bestJ = j;
        }
    }
    l = bestI;
    r = bestJ;
    return sum;

}

int main()
{
    int flag[10] = {-2, 11, -4, 13, -5, 2};
    //int flag[10] = {-7, 11, -4, -13, -5, -2};
    int besti, bestj, sum;
    sum = MaxSum(6, flag, besti, bestj);
    cout<<"最大子段和: "<<sum<<endl;
    cout<<"初始下标:  "<<besti<<endl;
    cout<<"最终下标:  "<<bestj<<endl;
}

相关文章

  • Manacher算法详解

    Manacher 算法是求字符串最大回文子串最高效的算法,时间复杂度和空间复杂度都为O(n),相较于时间复杂度为O...

  • 插入排序

    分类:排序算法 数据结构:数组 最坏时间复杂度:O(n^2) 最优时间复杂度:O(n) 平均时间复杂度:O(n^2...

  • 冒泡排序

    分类:排序算法 数据结构:数组 最坏时间复杂度:O(n^2) 最优时间复杂度:O(n^2) 平均时间复杂度:O(n...

  • 快速排序

    分类:排序算法 数据结构:不定 最坏时间复杂度:O(n^2) 最优时间复杂度:O(n log n) 平均时间复杂度...

  • map:169.求众数(投票算法)

    求众数 哈希Map 复杂度分析 时间复杂度:O(N) 空间复杂度: O(N) 投票算法 复杂度分析

  • 51NOD 1049 最大子段和

    最大子段和 分析 暴力算法复杂度是O(N^3) 可以对暴力算法进行优化,将时间复杂度降为O(N^2) 利用分治算法...

  • 数据结构之---求最大字段和, 时间复杂度o(n)算法

    问题描述 采用动态规划策略设计并实现算法,求解最大子段和及最大子段和的起始下标和终止下标,要求算法的时间复杂性不超...

  • 数据结构与算法-C语言4-算法时间和空间复杂度

    数据结构与算法-目录 1.时间复杂度的定义 算法时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。...

  • 最大子序列和问题的几种实现

    算法一,暴力法,时间复杂度O(n^3): 算法二,时间复杂度O(n^2): 算法三,在线处理,时间复杂度O(n):...

  • 每日一题20201106(169. 多数元素)

    hash表 时间复杂度: O(N)空间复杂度: O(N) 投票算法 时间复杂度: O(N)空间复杂度: O(1)

网友评论

      本文标题:数据结构之---求最大字段和, 时间复杂度o(n)算法

      本文链接:https://www.haomeiwen.com/subject/djcumxtx.html