前言
谈及最大子序列和问题,很多朋友都会想到经典的“分而治之”思想,也会想用递归解决该问题。而接下来要谈到的第四种算法,比递归简单且更有效,用到了一些巧妙的数学思维。有兴趣的朋友可以往下看是不是也是你熟悉的一种解法。
c语言实现代码
#include <stdio.h>
int MaxSubsequenceNum(const int arr[],int N)//N为数组长度
{
int ThisSum,MaxSum,j;
ThisSum=MaxSum=0;
for(int i=0;i<N;i++){
ThisSum+=arr[i];
if(ThisSum>MaxSum){
MaxSum=ThisSum;
}
else if(ThisSum<0){
ThisSum=0;
}
}
return MaxSum;
}
int main(){
int arr[8]={4,-3,5,-2,-1,2,6,-2};
int goal=MaxSubsequenceNum(arr,8);
printf("%d",goal);
return 0;
}
上述main函数中使用的数组最终输出结果为 11 。
结语
有人问我们为什么要学习数据结构与算法?现在排序查找的工具这么多,直接拿来用不就行了吗?
但是我们的目标不应该只是工具人,而是工程师。懂得选取最高效最优解的算法去解决问题非常有必要。
上述代码不仅仅是比“分而治之”的递归解法的代码少一点点,它也更高效。当然,一个好的算法的优越性是在大量数据的情况下才体现出来的,如果是像笔者用到的这个数组,用什么算法都差不多。