用c语言写一个求最大子数组的程序
时间: 2024-05-15 09:15:11 浏览: 100
以下是一个求最大子数组的C语言程序:
```c
#include <stdio.h>
int maxSubArray(int *nums, int numsSize) {
int maxSum = nums[0], curSum = nums[0];
for (int i = 1; i < numsSize; i++) {
curSum = curSum > 0 ? curSum + nums[i] : nums[i];
maxSum = maxSum > curSum ? maxSum : curSum;
}
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;
}
```
输出:
```
The maximum subarray sum is 6
```
该程序的核心算法是Kadane算法,具体实现如下:
- 维护两个变量:curSum和maxSum,分别表示当前子数组的和和最大子数组的和。
- 从数组的第二个元素开始遍历数组,对于每一个元素:
- 如果curSum大于0,则将当前元素加入curSum中;
- 如果curSum小于等于0,则将当前元素赋值给curSum。
- 在每次更新curSum后,检查它是否大于maxSum,如果是,则更新maxSum。
- 遍历结束后,maxSum即为最大子数组的和。
阅读全文