Vc++求最大子段和
时间: 2024-10-14 11:10:15 浏览: 18
在C++中,求最大子段和通常采用Kadane算法,这是一个动态规划的经典问题。以下是基本的步骤:
1. 初始化两个变量:`max_current`用于记录当前连续子数组的最大和,初始值为第一个元素;`max_global`用于存储到目前为止找到的最大子段和,初始值也为第一个元素。
2. 遍历输入数组,对于每个元素`num`,计算`num + max_current`和`max_current`本身两者之间的较大值,更新`max_current`。如果`max_current`加上`num`超过了`max_global`,则将`max_current`赋值给`max_global`。
3. 遍历结束后,`max_global`即为整个数组的最大子段和。
下面是一个简单的C++代码示例:
```cpp
#include <iostream>
int kadaneAlgorithm(int arr[], int size) {
if (size <= 0) return 0;
int max_current = arr[0], max_global = arr[0];
for (int i = 1; i < size; ++i) {
max_current = std::max(arr[i], arr[i] + max_current);
max_global = std::max(max_global, max_current);
}
return max_global;
}
int main() {
int nums[] = { -2, 1, -3, 4, -1, 2, 1, -5, 4 };
int n = sizeof(nums) / sizeof(nums[0]);
std::cout << "Max subarray sum is: " << kadaneAlgorithm(nums, n) << std::endl;
return 0;
}
```
阅读全文