用C语言给定一个连续整数数组,用动态规划求出最大连续子数组的和
时间: 2024-04-30 19:21:36 浏览: 102
动态规划的思想是将问题划分为多个子问题,通过求解子问题来得到原问题的解。最大连续子数组的和可以通过求解以每个元素为结尾的最大子数组和来得到。具体做法如下:
1. 定义一个变量max_sum表示当前最大子数组和,初始化为数组第一个元素的值,另外定义一个变量cur_sum表示当前子数组的和,初始化为0。
2. 从数组第二个元素开始遍历,对于每个元素,进行如下操作:
a. 将当前元素加入cur_sum中,更新cur_sum的值。
b. 将cur_sum与max_sum比较,如果cur_sum大于max_sum,则更新max_sum的值为cur_sum。
c. 如果cur_sum小于0,表示当前子数组的和已经为负数了,因此将cur_sum重置为0,相当于舍弃当前子数组。
3. 遍历完整个数组后,max_sum的值就是最大连续子数组的和。
下面是C语言的实现代码:
```c
#include <stdio.h>
int maxSubArray(int* nums, int numsSize){
int max_sum = nums[0];
int cur_sum = 0;
for (int i = 0; i < numsSize; i++) {
cur_sum += nums[i];
if (cur_sum > max_sum) {
max_sum = cur_sum;
}
if (cur_sum < 0) {
cur_sum = 0;
}
}
return max_sum;
}
int main() {
int nums[] = {-2,1,-3,4,-1,2,1,-5,4};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int result = maxSubArray(nums, numsSize);
printf("The maximum sum of subarray is %d\n", result);
return 0;
}
```
输出结果为:The maximum sum of subarray is 6。
阅读全文