C++ Can';t通过测试(Kadane';s算法)
我必须在一维数组中找到最大和(1经典之一:输入只包含C++ Can';t通过测试(Kadane';s算法),c++,algorithm,C++,Algorithm,我必须在一维数组中找到最大和(1经典之一:输入只包含INT\u MIN或总和为INT\u MIN的整数集。简单猜测。哪个测试失败得更准确?测试没有显示输入是什么,也没有显示输出应该是什么。我只得到一个错误,即它是错误的output@Adomas如果有多个子序列具有相同的maximum sum不应该是一个子数组吗?如果我们要处理子序列,问题就很简单了。总和可以达到210^10,高于2^31,maxintvalue #include <bits/stdc++.h> using name
INT\u MIN
或总和为INT\u MIN
的整数集。简单猜测。哪个测试失败得更准确?测试没有显示输入是什么,也没有显示输出应该是什么。我只得到一个错误,即它是错误的output@Adomas如果有多个子序列具有相同的maximum sum不应该是一个子数组吗?如果我们要处理子序列,问题就很简单了。总和可以达到210^10,高于2^31,maxint
value
#include <bits/stdc++.h>
using namespace std;
vector<int> adj;
int kStart = 0, kEnd = 0;
void getOutput()
{
ofstream output("max.out");
output << kStart + 1 << " " << kEnd + 1;
output.close();
}
void kadane()
{
int max_global = INT_MIN, max_current = 0, kS = 0;
for(int i = 0; i < adj.size(); i++)
{
max_current += adj[i];
if(max_current > max_global || (max_current == max_global && i - kS < kEnd - kStart))
{
max_global = max_current;
kStart = kS;
kEnd = i;
}
if(max_current < 0)
{
max_current = 0;
kS = i + 1;
}
}
}
void getData()
{
ifstream input("max.in");
int n; input >> n;
for(int i = 0; i < n; i++)
{
int num; input >> num;
adj.push_back(num);
}
input.close();
}
int main()
{
getData();
kadane();
getOutput();
system("pause");
}