给定由 n 个整数(可能为负整数)组成的序列,求解其连续的最大字段和。当所有数都是负整数时,最大字段和是 0 .用C语言实现
时间: 2024-09-24 21:13:27 浏览: 37
任意给定 n 个整数,求这 n 个整数序列的和、最小值、最大值
在C语言中,你可以使用动态规划来解决这个问题,这是一个经典的滑动窗口问题。我们可以维护两个变量,`currentSum`用于存储当前窗口内的元素和,`maxSum`记录到目前为止的最大和。算法的主要步骤如下:
1. 初始化 `currentSum = nums[0]` 和 `maxSum = currentSum`。
2. 遍历数组从第二个元素开始(i=1到n):
- 将当前元素加到 `currentSum` 上,如果加上当前元素后结果仍非正,说明这个元素不能增加最大和,所以更新 `currentSum = 0`。
- 否则,`currentSum += nums[i]`。
- 比较 `currentSum` 和 `maxSum`,更新较大的值作为新的 `maxSum`。
3. 返回 `maxSum`。
下面是C语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int maxSubArray(int* nums, int n) {
if (n == 0) return 0; // 如果数组为空,返回0
int currentSum = nums[0], maxSum = currentSum;
for (int i = 1; i < n; i++) {
currentSum = std::max(nums[i], currentSum + nums[i]); // 更新当前和
maxSum = std::max(maxSum, currentSum); // 更新最大和
}
return maxSum;
}
int main() {
int* nums = malloc(sizeof(int) * 5); // 示例数组,假设长度为5
// ... 初始化数组元素 ...
int result = maxSubArray(nums, 5);
printf("最大连续和为: %d\n", result);
free(nums); // 释放内存
return 0;
}
```
阅读全文