题目:
连续输入一串整数,空格间隔,检测到输入回车键停止,计算当前输入序列的最大子序列和。(大疆2019校招笔试题目)
两种方法:
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <vector>
// 方法1(效率高,代码简洁)
int getMaxSum(vector<int> arr)
{
int currentSum=0,maxSum = 0;
for(int i=0;i<arr.size();i++)
{
currentSum += arr[i];
if(currentSum>maxSum)
maxSum = currentSum;
if(currentSum < 0)
currentSum = 0;
}
return maxSum;
}
// 方法2(效率低,代码多)
int getMaxSum2(vector<int> arr)
{
int currentSum = 0,maxSum=0;
for(int i=0;i<arr.size();i++)
{
for(int j=i;j<arr.size();j++)
{
currentSum=0;
for(int k=i;k<=j;k++)
currentSum+=arr[k];
if(currentSum>maxSum)
maxSum = currentSum;
}
}
return maxSum;
}
int main()
{
vector<int> Array;
int num;
while(cin>>num)
{
Array.push_back(num);
if(getchar() == '\n')
break;
}
cout<<"Max sum is "<<getMaxSum(Array)<<endl;
cout<<"Max sum is "<<getMaxSum2(Array)<<endl;
system("pause");
return 0;
}