学渣渣的秋招之路

2019秋招准备

本渣渣的coding能力实在太弱,在秋招的这段时间希望能多少补起来一点。搜集了一些面经当中出现的编程题,一题一题的攻克!(哎呀,第一次写博客,不太会用CSDN额。)

题1:给定k个整数的序列{N1,N2,…,Nk },其任意连续子序列可表示为{ Ni, Ni 1, …, Nj },其中 1 <= i <= j <= k。最大连续子序列是所有连续子序中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{11,-4,13},最大连续子序列和即为20。

 法一:时间复杂度O(n^2)
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int a;
    vector<int> p;
    do{
        cin>>a;
        p.push_back(a);
    }
    while(getchar()!='\n');
    int sum1=0; 
    int sum2=0;
    int i,j;
    for(int i=0;i<p.size();i++)
    {
        sum2 = 0;
        for(int j=i;j<p.size();j++)
        {
            sum2+=p[j];
            if(sum2>sum1)
                sum1=sum2;
        }
    }
    cout<<sum1<<endl;

} 

法二:时间复杂度O(n)(查了下这个叫动态规划法)

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int a,sum=0;
    vector<int> p;
    do{
        cin>>a;
        p.push_back(a);
    }
    while(getchar()!='\n');
    int sum1=p[0];

    for(int i=0;i<p.size()-1;i++)
    {
        sum=sum1+p[i+1];
        if(sum>sum1)
            sum1=sum;
    }
    cout<<sum1<<endl;

}

猜你喜欢

转载自blog.csdn.net/hdu_dsm/article/details/82592824