542。 01 マトリックス
難易度: 中
トピック: 配列、動的計画法、幅優先検索、行列
m x n のバイナリ行列マットを指定すると、各セルの最も近い 0 の距離を返します。
共通のエッジを共有する 2 つのセル間の距離は 1 です。
例 1:
- 入力: mat = [[0,0,0],[0,1,0],[0,0,0]]
- 出力: [[0,0,0],[0,1,0],[0,0,0]]
例 2:
- 入力: mat = [[0,0,0],[0,1,0],[1,1,1]]
- 出力: [[0,0,0],[0,1,0],[1,2,1]]
制約:
- m == mat.length
- n == mat[i].length
- 1 4
- 1 4
- mat[i][j] は 0 または 1 です。
- マットに少なくとも 1 つの 0 があります。
注: この質問は 1765 と同じです。最高峰の地図
解決策:
マルチソース幅優先検索 (BFS) を使用します。ここでは、すべての 0 セルが開始点 (ソース) として扱われます。 1 セルごとに、最も近い 0 までの最小距離を計算します。
このソリューションを PHP で実装してみましょう: 542。 01 マトリックス
<?php /** * @param Integer[][] $mat * @return Integer[][] */ function updateMatrix($mat) { ... ... ... /** * go to ./solution.php */ } // Example usage: $mat1 = [[0,0,0],[0,1,0],[0,0,0]]; $mat2 = [[0,0,0],[0,1,0],[1,1,1]]; echo updateMatrix($mat1) . "\n"; // Output: [[0,0,0],[0,1,0],[0,0,0]] echo updateMatrix($mat2) . "\n"; // Output: [[0,0,0],[0,1,0],[1,2,1]] ?>
説明:
-
初期化:
- 距離配列は、最初にすべてのセルに対して PHP_INT_MAX で初期化されます。
- 距離配列内のすべての 0 セルが 0 に設定され、BFS キューに追加されます。
-
マルチソース BFS:
- キューを使用して、すべての 0 セルから BFS を同時に実行します。
- キュー内の各セルについて、その隣接セル (上、下、左、右) をチェックします。
- 近隣の距離を短縮できる場合 (距離[newRow][newCol] > currentDistance 1)、その距離を更新してキューに入れます。
-
出力:
- 距離配列は、すべてのセルの最も近い 0 までの最小距離で更新されます。
入出力:
入力 1:
$mat1 = [ [0, 0, 0], [0, 1, 0], [0, 0, 0] ];
出力 1:
Array ( [0] => Array ( [0] => 0 [1] => 0 [2] => 0 ) [1] => Array ( [0] => 0 [1] => 1 [2] => 0 ) [2] => Array ( [0] => 0 [1] => 0 [2] => 0 ) )
入力 2:
$mat2 = [ [0, 0, 0], [0, 1, 0], [1, 1, 1] ];
出力 2:
Array ( [0] => Array ( [0] => 0 [1] => 0 [2] => 0 ) [1] => Array ( [0] => 0 [1] => 1 [2] => 0 ) [2] => Array ( [0] => 1 [1] => 2 [2] => 1 ) )
このソリューションは、各セルが 1 回処理されるため、時間計算量が O(m × n) で効率的です。距離配列と BFS キューにより、空間複雑度も O(m × n) になります。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
- GitHub
以上が。マトリックスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
