一、整數陣列
1、題目要求:
a、輸入乙個整數陣列,陣列裡有正數也有負數。
b、陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。
c、求所有子陣列的和的最大值。
2、思路構想:
求陣列中的乙個元素(a)和上乙個元素(b)的和(c),將 a 和 c 進行比較,若 c > a ,則用 c 代替 a 的值,此操作遍歷整個陣列,此時最大子陣列的和就會被儲存在陣列中的某乙個位置。最後再次遍歷陣列,求得最大子陣列的和。
3、核心演算法:
for(i=2;i<=n;i++)4、程式源**:int ans=-100000
;
for(i=1;i<=n;i++)
ans=max(ans,a[i]);
#includeusing5.執行結果namespace
std;
intmain()
for(i=2;i<=n;i++)
int ans=-100000
;
for(i=1;i<=n;i++)
ans=max(ans,a[i]);
cout
<
最大子陣列的和:
"return0;
}
二、環形陣列
1、題目要求:
將題目一的整數陣列的首尾相連變成乙個環形陣列後,求最大子陣列的和。
2、思路構想:
環狀陣列出現最大連續子陣列和有兩種情況:a、a[0]~a[n]之間 b、包含a[n]~a[0]。 情況 a 按照整數陣列求最大子陣列球和即可,對於情況 b,既然最大的會包含a[n]~a[0],那麼最小連續區間應該是在a[0]~a[n]範圍內的,因此只要我們找出最小連續區間的末位置,以此開始作為起點來進行普通陣列的處理就可以找到第二種解法的答案。最後比較這兩種情況的結果,求得環狀陣列最大連續子陣列的和。
3、程式源**:
#includeusing4.執行結果namespace
std;
intmain()
for(i=1;i<=n;i++)
int k=0
;
for(i=1;i<=n;i++)
//情況a
for(i=2;i<=n;i++)
int ans=-100000
;
for(i=1;i<=n;i++)
ans=max(ans,a[i]);
//情況b
for(i=2;i<=n;i++)
int ans1=-100000
;
for(i=1;i<=n;i++)
ans1=max(ans1,b[i]);
int ans2=k +ans1;
int ans3=max(ans,ans2);
cout
<
最大子陣列的和:
"return0;
}
環形陣列求最大子陣列
題目 返回乙個環形陣列中的最大子陣列。要求 兩人結對完成程式設計任務。一人主要負責程式分析,程式設計。一人負責 複審和 測試計畫。思想 上一次的題目是返回乙個整數陣列中最大子陣列的和 這次在上一次的基礎上,我們原本想採用兩個相同陣列首位相連來實現環形的功能,採用原來的方法未能實現,後來採用課堂上張世...
環形陣列求最大子陣列和
陣列是環形的,即首尾相接 下標n 1的元素後面的元素下標為0 求最大子陣列和 環形陣列求最大子陣列和 解法一 把該環形陣列從某一點展開,連寫兩遍 複製乙份接到自己後面 然後當成無環的陣列求最大子陣列和,但這裡要限制乙個條件,就是最大子陣列的長度不可以超過n,所以求的時候要注意判斷。例如 上圖中展開寫...
返回乙個整數陣列(環形陣列)中最大子陣列的和
一 實驗題目 題目 返回乙個整數陣列中最大子陣列的和。要求 輸入乙個整形陣列,陣列裡有整數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。如果陣列a 0 a j 1 首尾相鄰,允許 a i 1 a n 1 a 0 a j 1 之和最大。同時返回最大子陣列的位置。求所有子陣列...