題目:返回乙個二維整數陣列中最大子陣列的和。
要求:1 輸入乙個二維整形陣列,陣列裡有正數也有負數。
2 二維陣列首尾相接,象個一條首尾相接帶子一樣。
3 陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。
4 求所有子陣列的和的最大值。要求時間複雜度為o(n)。
設計思想
目前的解決方案是最笨的方法,窮舉,所以時間複雜度達不到題目的要求,還需要進一步的尋找答案
源**題目:返回乙個二維整數陣列中最大子陣列的和。
要求:1 輸入乙個二維整形陣列,陣列裡有正數也有負數。
2 二維陣列首尾相接,象個一條首尾相接帶子一樣。
3 陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。
4 求所有子陣列的和的最大值。要求時間複雜度為o(n)。
設計思想
目前的解決方案是最笨的方法,窮舉,所以時間複雜度達不到題目的要求,還需要進一步的尋找答案
源**
#include#include程式截圖#include
#include
using
namespace
std;
ofstream
out;
void randin(int rowintnum,int colintnum,int a[100])//
隨機生成乙個二維陣列
cout
<
}}int maxarray(int array,int maxsize,int &location)
}return
max;
}void divanum(int a[100],int rowintnum,int colintnum,int subrownum,int subcolnum,int evetsum,int &location,int
times)
}arraynum++;//
記錄生成的子矩陣數
} }
evetsum[times]=maxarray(sum,arraynum,location);//
記錄每次生成的子矩陣中的最大子矩陣數值
}void print(int row,int col, int array[100
])
out<
; }
}void
main()
}cout
<
輸出最大矩陣的和
"<
max=maxarray(evetsum,(subrownum-1)*(subcolnum-1
),loctimes);
cout
out<
out.close();
cout
<
是否繼續測試(輸入0繼續)
"<
cin>>q;
system(
"cls");}}
實驗總結
此次試驗的收穫就是熟悉了%和for迴圈語句的配合對於陣列問題產生的效果,對於達到時間複雜度達到o(n),想出的方法大多都無法達到要求,只能再查詢資料找尋新的思路了,之後會貼在下面。
返回乙個整數陣列中最大子陣列的和。
該題的意思是 如果乙個陣列為 1 5 3 19 5 3 第乙個數之後若是該數與前乙個數之和大於該數那麼將這個和替換概數 即5 1 5,5不變 而5 3 5 則將三替換為8以此類推 當乙個數與前乙個數之和再次小於這個數時,這個數為乙個下乙個的最小陣列,如5 3 19 11 5 5 則5為下乙個最小陣列...
返回乙個整數陣列中最大子陣列的和
1.題目 要求 要求程式必須能處理1000 個元素 每個元素是int32 型別的 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 2.設計思想。分別計算出所有子陣列的和,進行比較,找出最大子陣列...
返回乙個整數陣列中最大子陣列的和
1.設計思想 將一維迴圈陣列採用遍歷的方法來尋找最大子陣列,將含n個數的迴圈陣列依次從各個點斷開,產生n個n個陣列的單鏈陣列,再遍歷尋找最大子陣列。2.出現的問題 整形陣列的生成方式 3.可能的解決方案 整形陣列隨機生成,每個子陣列的資料個數也是隨機的。4.源 include using names...