先看一維陣列的情況:
方法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 解法二 思路 我們考慮陣...