求最大子串行

2021-09-01 02:44:47 字數 575 閱讀 9253

1.暴力求解,時間複雜度為n^3

int maxsubarray(int * a , int n)

}return maxsum;

}

2.分治法

將陣列從中間分開,那麼最大子陣列要麼完全再左半邊陣列,要麼完全在右半邊陣列,要麼跨立在分界點上。完全在左陣列、右陣列遞迴解決。跨立在分界點上:實際上是左陣列的最大字尾和右陣列的最大字首的和,因此,從分界點向前掃,向後掃即可。 

double maxaddsub(double *a,int from , int to)

int right = a[middle + 1];

now = a[middle + 1];

for(i=middle+2;i<=to;++i)

double m3 = left + right;

return max(m1.m2,m3);

}

3. 分析法(邏輯推理的演算法應用)

只需要讓sum為a[0]

如果sum大於0 ,就取下一位,如果sum小於0,就將sum=a[i],捨去前面的值

求序列的最大子串行

看 程式設計珠璣 一書,講解求序列的最大子串行。問題 給定乙個實數序列x1,x2,xn 不必是正數 尋找乙個連續的子串行xi,x i 1 xj,使得其數值之和在所有連續子串行數值之和中是最大的。演算法1思路 比較所有連續序列數值的和,找到最大的。1.maxsofar 0 2.for i 0,n 3....

求最大子串行和

include using namespace std int maxseqsum const int a,int n o n 2 return s2 int maxseqsum2 const int a,int n o n else if s1 0 return s2 int maxseqsum3...

求最大子串行之和

摘要 給出乙個序列,求出其中連續的子串行中和最大的乙個。如 1 3 5 2 1 4 5 最大子串行之和是2 1 4 5 基本思路 最簡單的辦法就是遍歷一邊序列,用變數thissum記錄遍歷過的元素之和,當thisum 0時,繼續相加.若thisum 0,令thisum 0,吧下乙個元素作為新的子串行...