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;
}