C语言实现最大子段和算法 - mis函数详解
#include <stdio.h>
int mis(int a[], const int n) { int max_sum = a[0]; // 初始化最大子段和为第一个元素 int current_sum = a[0]; // 当前子段和为第一个元素
for (int i = 1; i < n; i++) {
// 如果当前子段和加上当前元素大于当前元素本身,则将当前元素加入子段中
if (current_sum + a[i] > a[i]) {
current_sum += a[i];
} else {
// 如果当前子段和加上当前元素小于等于当前元素本身,则将当前元素作为新的子段的起点
current_sum = a[i];
}
// 更新最大子段和
if (current_sum > max_sum) {
max_sum = current_sum;
}
}
return max_sum;
}
int main() { int a[1024]; int N = 0; scanf("%d", &N); for (int i = 0; i < N; i++) scanf("%d", &a[i]);
printf("maximum internal sum = %d", mis(a, N));
return 0;
}
原文地址: http://www.cveoy.top/t/topic/in2s 著作权归作者所有。请勿转载和采集!