(1)源**:
1 #include2(2)執行截圖:using
namespace
std;
3#define n 1000045
int max(int a, intb)6
12if (a < b&&a < 0)13
16if (a + b >= a&&a + b >=b)
1720
return
y;21}22
23int
select(int a, int l, int
r)24
30int maxr = a[m+1], maxl =a[m];
31int ml = a[m], mr = a[m + 1
];32
for (int i = m - 1; i >= l; i--)
3339}40
for (int i = m + 2; i <= r; i++)
4147}48
int e=select
(a, l, m);
49int z=select(a, m + 1
, r);
50int u=max(maxr, maxl);
51if (u >= e&&u >=z)
5255
if (e > z&&e >u)
5659
if (z > e&&z >u)
6063}64
intmain()
6576 cout <
77int p=select(a, 0, s-1
);78 cout << "
子陣列的最大和為
"<< p <
79return0;
80 }
(3)思路:
對於求子陣列最大值有時間複雜度的要求,不能用兩個for語句巢狀,我是用的遞迴演算法,利用類似折半查詢對元素進行相加並且進行比較,從而求出每個陣列的子陣列和為最大的值,再迴圈比較。
(4)缺陷記錄日誌:
用時:90分鐘,從3月23號11:00到12:30
20分鐘,從17:50到18:10對程式的不足進行改進
子陣列最大和
看到的乙個面試題。有很多人已經寫過,在此記下,明天給出拓展。題目 輸入乙個整型陣列,陣列裡有正數也有負數,陣列中連續的乙個或多個整數組成為子陣列,求有最大和的子陣列。要求 時間複雜度o n 如下 include using namespace std int main void int size s...
子陣列最大和
設sum i 為以第i個元素結尾且和最大的連續子陣列。假設對於元素i,所有以它前面的元素結尾的子陣列的長度都已經求得,那麼以第i個元素結尾且和最大的連續子陣列實際上,要麼是以第i 1個元素結尾且和最大的連續子陣列加上這個元素,要麼是只包含第i個元素,即sum i max sum i 1 a i a ...
子陣列最大和
思路 隨機產生5個數存在陣列a裡,定義陣列b來儲存子陣列的和,求和先求以第乙個隨機數開頭的所有情況,再求以第二個數開頭的所有情況,以此類推,例如 隨機數為1,2,3,4,5 先求 1,2,3,4,5 1,2,3,4 1,2,3 1,2這幾個子陣列的和,然後繼續求 2,3,4,5 2,3,4 2,3以...