求子数组和最大,同时返回子数组的开始和结尾处。 如需要返回开始和结尾,只需额外添加两个下标标识即可。 #include <iostream> using namespace std; typedef struct Result { int sum; int begin; int end; }Result; Result getMaxSubArraySum(int*array, int len) { Result result; result.sum = result.begin = result.end = 0; int tmpSum = 0; int tmpBegin = 0; for(int i=0; i<len; i++) { if(tmpSum + array[i] > 0) { tmpSum += array[i]; if(result.sum < tmpSum) { result.end = i; result.begin = tmpBegin; result.sum = tmpSum; } } else { tmpSum = 0; tmpBegin = i+1; } } return result; } int main() { int arr[] = {2,-3,10,-4,3,1,-2,5,-2,11}; int len = sizeof(arr)/sizeof(int); Result re = getMaxSubArraySum(arr, len); cout<<re.sum << " from "<<re.begin <<" to "<<re.end << endl; cin >> arr[0]; return 0; }