数据结构时间复杂度

本文探讨了三种不同时间复杂度的算法来寻找指定数列中所有子列和的最大值,包括O(N^3)、O(N^2)和O(N)的实现方式。

问题引出:

编程找出指定数列的所有子列和的最大值;

假定数列:

int arry[16] = {5, -6, 4, -5, 3, 1, 2, -4, 8, -9, 3, 1, -7, 6, 4, -1};
 
算法一:
#include <iostream>
using namespace std;
int main()
{
    const int N = 16;
    int arry[N] = {5, -6, 4, -5, 3, 1, 2, -4, 8, -9, 3, 1, -7, 6, 4, -1};
    int maxsum = 0;
    
    for (int k = 0; k < N; k++)
    {
        for (int j = k; j < N; j++)
        {
            int tempsum = 0;
            for (int i = k; i <= j; i++)
            {
                tempsum += arry[i];  
            }
            maxsum = tempsum > maxsum ? tempsum : maxsum;
        }
    }
    cout << maxsum << endl;
    return 0;
}

例用三个循环:其时间复杂度T(N) = O(N3);

算法二:

#include <iostream>
using namespace std;
int main()
{
    const int N = 16;
    int arry[N] = {5, -6, 4, -5, 3, 1, 2, -4, 8, -9, 3, 1, -7, 6, 4, -1};
    int maxsum = 0;
    
    for (int k = 0; k < N; k++)
    {
        int tempsum = 0;
        for (int j = k; j < N; j++)
        {
            tempsum += arry[j];    
            maxsum = tempsum > maxsum ? tempsum : maxsum;
        }
    }
    cout << maxsum << endl;
    return 0;
}

例用两个循环:其时间复杂度T(N) = O(N2);

算法三:

#include <iostream>
using namespace std;
int main()
{
    const int N = 15;
    int arry[N] = {5, -6, 4, 5, 3, 1, 2, -4, 8, -9, 3, 1, -7, 6, -4};
    int maxsum = 0;
    int tempsum = 0;
    for (int k = 0; k < N; k++)
    {
        tempsum += arry[k];
        if (tempsum < 0)
        {
            tempsum = 0;
        }
        else
        {
            maxsum = maxsum > tempsum ? maxsum : tempsum;
        }
        
    }
    cout << maxsum << endl;
    return 0;
}

例用一个循环:其时间复杂度T(N) = O(N);

 

 

转载于:https://www.cnblogs.com/flowingwind/p/8443585.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值