连续最大子串的两种解法
题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值,例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。
时间复杂度为O(n)的算法
#include <stdio.h> int maxsum(int s[],int len){ int sum=0; int max=s[0]; for(int i=0;i<len;i++){ if(sum<=0){ //if sun<0 then cut before sum=s[i]; }else{ sum=sum+s[i]; } if(sum>max){ max=sum; } } return max; } int main(int argc, char *argv[]) { int s[]={-3,2,-3,3,-2,-4,-5}; printf("%d",maxsum(s,7)); return 0; }
时间复杂度为O(n2)的算法
#include <stdio.h> int maxsum(int s[],int len){ int max=s[0]; for(int i=0;i<len;i++){ for(int j=i;j<len;j++){ int sum=0; sum=sum+s[i]; if(sum>max){ max=sum; } } } return max; } int main(int argc, char *argv[]) { int s[]={-3,2,-3,3,7,-4,-5}; printf("%d",maxsum(s,7)); return 0; }