用c编写最大字段和问题
时间: 2024-05-13 16:20:39 浏览: 34
以下是使用C语言编写最大字段和问题的示例代码:
```c
#include <stdio.h>
int maxSubArray(int* nums, int numsSize) {
int maxSum = nums[0], currentSum = nums[0];
for (int i = 1; i < numsSize; i++) {
currentSum = (currentSum > 0) ? currentSum + nums[i] : nums[i];
maxSum = (currentSum > maxSum) ? currentSum : maxSum;
}
return maxSum;
}
int main() {
int nums[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int maxSum = maxSubArray(nums, numsSize);
printf("The maximum subarray sum is %d\n", maxSum);
return 0;
}
```
此代码使用Kadane算法来解决最大子数组问题。它遍历整个数组,维护当前子数组的和和最大子数组的和。在每个位置,它将当前元素添加到当前子数组的和中,并检查是否比最大子数组的和更大。如果是,则更新最大子数组的和。如果当前子数组的和小于零,则将其重置为当前元素,因为任何包含负值的子数组都不可能是最大的。
在上面的示例中,输入数组是{-2, 1, -3, 4, -1, 2, 1, -5, 4},最大子数组是{4, -1, 2, 1},其和为6。输出将是“最大子数组和为6”。
阅读全文