最大子数组动态规划的C语言代码
时间: 2024-06-15 14:01:53 浏览: 101
c语言实现动态数组代码
最大子数组动态规划是一种解决数组中连续子数组和最大问题的经典算法。在C语言中,我们可以使用一个二维数组或者称为“滑动窗口”的方法来实现。这里是一个简单的C语言代码示例:
```c
#include <stdio.h>
int maxSubArray(int arr[], int size) {
// 初始化两个变量:当前最大和全局最大
int max_current = arr, max_global = arr;
// 遍历数组
for (int i = 1; i < size; i++) {
// 如果当前元素大于0,加上前一个最大值
if (arr[i] > 0)
max_current = arr[i] + max_current;
// 否则,从头开始计算新的最大子数组
else
max_current = arr[i];
// 比较当前最大值和全局最大值
max_global = max(max_global, max_current);
}
return max_global;
}
int main() {
int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int n = sizeof(arr) / sizeof(arr);
printf("The maximum contiguous sum is: %d\n", maxSubArray(arr, n));
return 0;
}
```
这个代码首先初始化`max_current`和`max_global`为数组的第一个元素,然后遍历数组,对于每个元素,如果它大于0,就将其添加到`max_current`中;否则,从当前元素重新开始计算子数组。每一步都更新`max_global`为两者中的较大者。最后返回`max_global`作为最大子数组和。
阅读全文