最大子序列之和(c++和python实现)

c++
方法一:

#include<iostream>
#include<vector>

using namespace std;

int main()
{
    int N,num;
    cin >> N;
    vector<int> m;
    for (int i = 0; i < N; ++i)
    {
        cin >> num;
        m.push_back(num);
    }//输入值和长度

    int max = m[0];                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

    for (int i = 0; i<N; i++) 
    {
        int sum = 0; //sum必须清零
        for (int j = i; j<N; j++) 
        { 
            sum += m[j];

            if (sum > max)
                max = sum;
        }
    }
    cout << max << endl;
    system("pause");
    return 0;
}

时间复杂度是O(N^2)
方法二:

#include<iostream>
#include<vector>

using namespace std;

int main()
{
    int N, num;
    cin >> N;
    vector<int> m;
    for (int i = 0; i < N; ++i)
    {
        cin >> num;
        m.push_back(num);
    }

    //输入值,比较
    int max1 = m[0], max2 = m[0];
    for (int i = 0; i < N; ++i)
    {
        if (max1 < 0)
        {
            max1 = m[i];
        }
        else
        {
            max1 += m[i];
        }
        if (max1 > max2)
            max2 = max1;
    }
    cout << max2 << endl;
    system("pause");
    return 0;
}

o(N)

python实现:

def f1(arr):
        max=sum=arr[0]
        for i in arr:
                if sum<0:
                        sum=i
                else:
                        sum +=i
                if sum>max:
                        max=sum
        return max

if __name__ == '__main__':
        n = input()
        array = input()
        N = int(n)
        arr = array.split(' ')
        for i in range(N):
                arr[i] = eval(arr[i])
        print(f1(arr))

猜你喜欢

转载自blog.csdn.net/weixin_42655231/article/details/82529058