一组整数串,有正有负,求解其中和最大子串。比如 <2 -1 3 -5 4>
就是 <2 -1 3>
我写的代码如下:
#include <iostream>
#include <vector>
using namespace std;
void print_max(vector<int>& vec)
{
int now_startpos = 0;
int now_size = 0;
int now_sum = 0;
int max_startpos = 0;
int max_size = 0;
int max_sum = 0;
for (size_t i = 0; i <
vec.size(); ++ i)
{
if (vec[i] >=
0)
{
if
(now_sum <= 0)
{
now_startpos = i;
now_size = 1;
now_sum = vec[i];
}
else if
(now_sum > 0)
{
++ now_size;
now_sum += vec[i];
}
if
(now_sum > max_sum)
{
max_startpos = now_startpos;
max_size = now_size;
max_sum = now_sum;
}
}
else
{
if
(now_sum + vec[i] <= 0)
{
now_startpos = 0;
now_size = 0;
now_sum = 0;
}
else
{
++ now_size;
now_sum += vec[i];
}
}
}
// print
cout << "start pos
= " << max_startpos
<< endl;
cout << "size = "
<< max_size
<< endl;
cout << "sum = "
<< max_sum
<< endl;
cout << "elements
: ";
for (int i = max_startpos; i <
max_startpos + max_size; ++ i)
{
cout
<< vec[i]
<< " ";
}
cout <<
endl;
}
int main()
{
vector<int>
vec;
print_max(vec);
cout <<
"================================================================="
<< endl;
vec.push_back(-1);
print_max(vec);
cout <<
"================================================================="
<< endl;
vec.push_back(1);
print_max(vec);
cout <<
"================================================================="
<< endl;
vec.push_back(3);
vec.push_back(4);
vec.push_back(-1);
vec.push_back(-2);
vec.push_back(2);
vec.push_back(2);
print_max(vec);
cout <<
"================================================================="
<< endl;
vec.push_back(-3);
vec.push_back(1);
vec.push_back(1);
print_max(vec);
cout <<
"================================================================="
<< endl;
return 0;
}
我写的代码如下:
#include <iostream>
#include <vector>
using namespace std;
void print_max(vector<int>& vec)
{
}
int main()
{
}
本文介绍了一种求解整数串中最大子串和的算法,并提供了详细的C++实现代码。通过实例演示了如何找到具有最大和的连续子串及其起始位置和长度。

806

被折叠的 条评论
为什么被折叠?



