ps要注意的几点:
1.动态内存分配要加<stdlib.h>,我又双叒叕忘了
2.在循环的过程中,要先标记出局部最优再将count清为0(下图上面为arr,下面为局部最优,当局部最优<0,就没必要加下面的数了,因为会拉低下面的数的值,所以清0相当于重新开始,以下面的数为起点,懂了吗?)
3.师从carl大哥,多看看他的视频吧,我最近在旅游没学很多东西
4.先这样拜拜
#include <stdio.h> #include<stdlib.h> int maxSubArraySum(int arr[], int n) { int result= 0; int count = 0; for (int i= 0; i < n; i++) { count += arr[i]; if (count > result) { result = count;//标记当前局部最优 } if (count < 0) { count = 0; } } return result;//输出全局最优 } int main() { int n; scanf("%d", &n); int* arr = (int*)malloc(n * sizeof(int)); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } int result = maxSubArraySum(arr, n); printf("%d\n", result); free(arr); return 0; }