最大子数组的和,比较经典的题目了,直接上代码了。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
int GetMaxSum(int *arr, int len, int &start_index, int &end_index) {
int max_val = -100;
start_index = -1;
end_index = -1;
if (len < 0) {
return 0;
}
int sum_val = -100;
for (int i = 0; i < len; i++) {
if (sum_val < 0) {
sum_val = arr[i];
start_index = i;
} else {
sum_val += arr[i];
}
if (max_val <= sum_val) {
max_val = sum_val;
end_index = i;
}
}
return max_val;
}
int main(int argc, char *argv[]) {
int arr[] = {-2, -3, 4, -1, -2, 1, 5, -3};
int len = sizeof(arr)/sizeof(int);
std::cout << "filename: " << __FILE__ << " linenum: " << __LINE__
<< " len: " << len << std::endl;
int start_index = -1;
int end_index = -1;
int max_val = GetMaxSum(arr, len, start_index, end_index);
std::cout << "filename: " << __FILE__ << " linenum: " << __LINE__
<< " max_val: " << max_val << std::endl;
std::cout << "filename: " << __FILE__ << " linenum: " << __LINE__
<< " index_info: " << start_index << "," << end_index << std::endl;
return 0;
}