求陣列的字陣列之和的最大值

2021-07-02 16:28:31 字數 956 閱讀 6320

先看一維陣列的情況:

方法1:

遍歷所有可能的sum:時間複雜度為o(n*n*n)

int maxsum1(int *a,int n)

} return m;

}

對**進行優化 可以達到o(n*n)

int maxsum2(int *a,int n)

} return m;

}

方法二:

將陣列分為等長的兩端陣列a1,a2 分別求出兩段陣列各自的最大子段和 則原來陣列a的最大子段和為:

a.a 與a1的最大子段和相同

b.a 與a2的最大子段和相同

c.a與跨過其中兩個元素a[n/2-1]和a[n/2]的子段和相同,可以通過遍歷陣列 找到分別以這連個元素結尾的最大的一段和 s1 和s2  那麼最大子段和為s1+s2

總的時間複雜度為o(n*log n)

int maxdiv(int *a,int l,int r)

int k=c+1;

int tmp2=a[c+1];

while(tmp2+a[k+1]>tmp2 && k

方法三:動態規劃法  時間複雜度為o(n)

#include #include using namespace std;

int findsum(int *a, int n)

int main()

; int maxsum = -1;

for (int i = 0;i < 8;i++)

cout << maxsum << endl;

return 0;

}

int maxsum4(int *a,int n)

return 0;

}

求陣列的子陣列之和最大值

題目 乙個有n個整數元素的一維陣列a 0.n 1 這個陣列當然有很多子陣列,那麼子陣列之和最大值是多少?解答 求子陣列之和最大,這裡是連續的子陣列,如果乙個數為負數,陣列之和會減少,記住最大值,只要陣列之和沒有小於0就可以繼續累加,比如,3到 1子陣列之和減小了,但是沒有小於0,可以繼續累加下乙個數...

求陣列的子陣列之和的最大值

本題的要求顯然是o n 級的複雜度咯 結合書上的分析,可以發現如下條件 從陣列右邊像左遍歷,當前下標為i,那麼最大值有3中情形 1.最大值為array i 2.最大值為array i maxsuminclude 3.最大值為不包括array i 的maxsumexclude 最後返回最大值 max ...

求陣列的子陣列之和的最大值

乙個有n個整數元素的一維陣列 a 0 a 1 a n 2 a n 1 這個陣列當然有很多子陣列,那麼子陣列之和的最大值是什麼呢?下面將給出3種解法的 解法一 int max maxsum1 int a,int n return maxnum 分析 該演算法的複雜度為o n2 解法二 思路 我們考慮陣...