邊界為1的最大子方陣

2021-09-30 19:28:27 字數 2220 閱讀 4340

思路如下,先建立乙個三維輔助陣列,第一第二位存放矩陣的行和列的下標,第三位0時,存放

當前位置向右連續共有幾個1,第三位為1時,存放當前位置向下連續共有幾個1。

由於矩陣的最後一列的元素,它的底下為空,所以要先單獨提取出來,為最後一行三維陣列第三個元素向右向左單獨賦值。此後的元素賦值類似最後一列,還是迴圈裡面乙個個累加

**塊:

```private static void generalhelprec(int a) 

else

helper[row][i][1]=1;

} }row--;//最後一行處理完,行上去了一行

//之所以單獨處理最後一行,因為往下吃1的呢部分最後一行是零,我們直接置1上去。

//然後處理上面幾行的資料

for (int i= row; i >=0; i--)

else

helper[i][j][1]=helper[i+1][j][1]+1;}}

}}```

為了方便檢視封裝乙個helper的列印類

private static void print(int helper) 

system.out.println();

} }

如下圖執行結果 如 4,2 表示右邊包括自身連續4個1,下面包括自身連續2個1

最後是寫乙個處理我們得到helper[ ][ ][ ]資料集的方法solve()

while 控制圈數,從最大值開始判斷,成立輸出的n就是最大的正方形邊長

兩個for迴圈控制點對點,矩陣一次一次移動呼叫solve()方法

private static int solve(int a) 

}} n--;

}

return n;

}

中間的check()單獨寫了一條,原理是正方形左上角點 0,1元素》=n 右上角點能判斷下方是否為1,左下角點能判斷右方是否為n。覆蓋了正方形每條邊。

private static boolean check(int i, int j, int n) 

return false;

}

最後是整道問題的原始碼,供讀者執行除錯:

package 藍橋杯;

//給定乙個nxn的矩陣matrix,在這個矩陣中,只有0和1兩種值,返回邊框全是1的最大正方形的變成長度

// ,

// ,

// ,

// ,

// 其中邊框全是1的最大正方形的大小4*4 返回4

public class 邊界為1的字方陣 ,,,

,};generalhelprec(a);

print(helper);

int res= solve(a);

system.out.println(res);

} private static void print(int helper)

system.out.println();

} }private static void generalhelprec(int a)

else

helper[row][i][1]=1;

} }row--;//最後一行處理完,行上去了一行

//之所以單獨處理最後一行,因為往下吃1的呢部分最後一行是零,我們直接置1上去。

//然後處理上面幾行的資料

for (int i= row; i >=0; i--)

else

helper[i][j][1]=helper[i+1][j][1]+1;}}

}}private static int solve(int a)

}} n--;

}

return n;

} private static boolean check(int i, int j, int n)

return false;

}}

藍橋杯 邊界為1的最大子方陣(預處理)

其中,邊框全是1的最大正方形的大小是4 4,故返回4。這道題我之前還寫過一篇採用暴力搜尋法來解決的,但是時間複雜度比較大o n 4 可能會超時,沒看過的小夥伴可以看下 暴力搜尋版 此處我們先對這個矩陣進行預處理,有點類似於動態規劃,思路就是新建乙個n n 2的三維陣列,其中規定,每乙個元素如果是1,...

動態規劃 最大子方陣問題

題目 給定乙個 n n 的矩陣 a,矩陣中的元素只取 0 或者 1。設計乙個動態規劃演算法,求解得到 a 中元素全是 1 的子方陣使其階數達到最大值。分析 其實求解的時候當成m n的矩陣做就行了。設n階矩陣表示為a 1.n 1.n b i j 表示前i行前j列所包含的1的個數。最優子結構 c i j...

力扣 1139 最大的以 1 為邊界的正方形

給你乙個由若干 0 和 1 組成的二維網格 grid,請你找出邊界全部由 1 組成的最大 正方形 子網格,並返回該子網格中的元素數量。如果不存在,則返回 0。示例 1 輸入 grid 1,1,1 1,0,1 1,1,1 輸出 9 示例 2 輸入 grid 1,1,0,0 輸出 1 1 grid.le...