已知有n和元素的数组,下标为0-n-1,求和最大的子数组,总体来说有三种方法:
暴力求解法:
算法思想:假设下标j到i-1的子数组为和最大的子数组,则有 0<=j < i, 1 <= i < n,因此,算法代码可以实现如下:
#include <iostream>
#include <vector>
void max_sub_array(const std::vector<int>& array, size_t& start, size_t& end) {
if (array.size() == 0) {
return;
}
start = 0;
end = start + 1;
long long max_sum = array[0];
for (size_t i = 1; i <= array.size(); ++i) {
for (size_t j = 0; j < i; ++j) {
long long sum = 0;
// 求子数组的和
for (size_t k = j; k < i; ++k) {
sum += array[k];
}
if (sum > max_sum) {
start = j;
end = i;
max_sum = sum;
}
}
}
}
int main(int argc, char** argv) {
std::vector<int> array = {
2, -1, -2, 3, -1,