[Programmers]-最大正方形を検索
4838 ワード
1. Problem 📃
📚 ソース-プログラマ
問題の説明
表(プレート)は1と0で塗りつぶされます.表1は1 x 1の正方形からなる.表に1からなる最大正方形を見つけ、戻り幅の解関数を完了してください.△正方形とは、軸に平行な正方形のこと.
例:
12340111111111110010
もしあるならば、最大の正方形は
12340111111111110010
幅が9になるので、9を返せばいいです.
せいげんじょうけん
boardanswer[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]]9[[0,0,1,1],[1,1,1,1]]4
I/O例説明
I/O例#1
上記の例のように.
I/O例#2
| 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 |
最大正方形の幅が4であるため、4を返します.
2. Logic 👨🏫
まずDPでこの問題を解決しました.
左、上、左の対角線の3つの部分を比較します.
それらの位置は以前にチェックされており、各位置に最大矩形のエッジの長さが格納されています.
したがって、3つの位置において、最小値+1は、その領域が有する最大矩形幅の長さである.
-ただ、気をつけて.左、上、左の対角線を比較するため、0行と0列からインデックスエラーが発生します.
-上記のように、比較は現在の値が1の場合にのみ使用できます.
例を挙げて以下のように説明する.TestCase 2に注目してみましょう.
123400111👉 111
👉 左(1)、上(0)、左(0)の対角線の最小値は0です.👉の双曲線コサインを返します.
1234001111👉 11
👉 左(1)、上(1)、左対角線(0)の最小値は0です.👉の双曲線コサインを返します.
12340011111👉 2
👉 左(1)、上(1)、左対角線(1)の最小値は1です.👉の双曲線コサインを返します.
注意が必要な例外処理
第1列
たくさんあると思いましたが、これしか思いつかなかったので、とにかく!
3. Code 💻
1.私が解いたパスワード
def solution(board):
b_max = 0
for i in range(len(board)):
for j in range(len(board[i])):
if i > 0 and j > 0 and board[i][j] == 1:
board[i][j] = min(board[i-1][j], board[i-1][j-1], board[i][j-1]) + 1
b_max = max(b_max, board[i][j])
return b_max**2
Reference
この問題について([Programmers]-最大正方形を検索), 我々は、より多くの情報をここで見つけました
https://velog.io/@odh0112/Programmers-가장-큰-정사각형-찾기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def solution(board):
b_max = 0
for i in range(len(board)):
for j in range(len(board[i])):
if i > 0 and j > 0 and board[i][j] == 1:
board[i][j] = min(board[i-1][j], board[i-1][j-1], board[i][j-1]) + 1
b_max = max(b_max, board[i][j])
return b_max**2
Reference
この問題について([Programmers]-最大正方形を検索), 我々は、より多くの情報をここで見つけました https://velog.io/@odh0112/Programmers-가장-큰-정사각형-찾기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol