找出乙個二維陣列中的最大的正方形

2021-10-05 02:02:20 字數 914 閱讀 5621

乙個二維陣列中的值只有0和1,現在想要找出這個陣列中的最大的1所構成的正方形, 要求輸出這個正方形的面積

這是華為筆試的一道題目, 拿到這個題的第乙個想法就是迴圈套迴圈, 但是發現時間複雜度太高了,無法ac, 後面也沒有做出來這一題, 筆試結束後在網上看了下, 大家給出的是動態規劃的方法來做, 現在將這個演算法整理如下;

首先, 定義乙個和原來的矩陣matrix同等大小的矩陣dp[maxn][maxn], dp[i][j]表示matrix中以i,j為右下角的矩陣的邊長,

初始時候,將matrix的第0行和第0列都賦值到dp中,然後,狀態轉移方程如下:

若matrix[i][j]=0, 則dp[i][j]=0;

若matrix[i][j]=1,則dp[i][j]= min(dp[i-1][j],dp[i-1][j-1],dp[i][j-1]) +1;

全部**如下:

#include #include using namespace std;

const int maxn = 10;

int getsquare(int matrix[10], int n)

for (int i = 1; i < 4; i++)

} }int m = 0;

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

} return m * m;

}int main() ;

int dp[maxn][maxn] = ;

int n = 0;

cin >> n;

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

} cout<< getsquare(matrix, n);

}

返回乙個二維陣列中的最大子陣列

一 實驗題目 返回乙個二維陣列中的最大子陣列 二 實驗思路 由於我們的能力有限,所以我們就設計了乙個3行2列的二維陣列。現在以乙個例子來說明一下我們的思想 例如 輸入的二維陣列是 1 2 3 4 5 9 1 首先計算出第一行中有關 1的所有的子陣列,然後計算出有關2的子陣列,同樣的道理可以計算第二行...

求乙個二維陣列的最大子矩陣

演算法描述 本題可以使用窮舉法,但是那樣不容易實現以及效率不高,我們的想法是,將二維陣列變成一維陣列,再將此 一維陣列 按照上次的做法既可求出最大子陣列,怎麼樣將二維變成一維呢 例如我們做的是四行四列的陣列,將每一行用乙個sum來表示,則有sum 1 sum 2 sum 3 sum 4 sum 1 ...

乙個二維陣列的排序

一維陣列的補充 foreach 使用foreach迴圈遍歷陣列和集合元素時,無須獲得陣列和 集合的長度,無須根據索引來訪問陣列元素和集合元素,系統自動遍 歷陣列和集合的每個元素。for string name names 等同於for int i 0 i 多編寫時候的麻煩。老師講完這個後自己寫了乙個...