行列境界を縮小しながら螺旋状に行列要素を取得する手法

二次元配列の要素を時計回りの螺旋順で収集するアルゴリズムを解説します。主なアプローチとして、境界値を逐次更新する方法と、方向ベクトルと訪問済みフラグを利用する方法の2つを紹介します。 境界縮小方式(推奨) この手法では、未処理領域の上下左右の境界を保持し、外周を一周するたびに境界を内側に縮めます。各周回で4つの辺(上辺→右辺→下辺→左辺)を順に走査し ...

9月2日 03:08 投稿

時計の針を回転させます

技術的な課題: あなたはN個の回転式時計を与えられます。 各時計にはMの針があり、これらの針は位置1、2、3、...、P(これらの数字は時計の表面を囲む数を表します)を指すことができます。時計はN行M列の整数行列Aで表されます。最初の行は最初の時計の針を表し、以下に続きます。 例えば、五つの行と二つの列をもつ行列Aを与えられ、P=4の場合: <tt> A[0][0] = ...

7月24日 00:50 投稿

グラフ理論と行列操作アルゴリズム

100. 島の最大面積 与えられた1(陸地)と0(水)からなる行列において、島の最大面積を計算します。島は水平または垂直方向に隣接する陸地で構成され、周囲が水で囲まれているものとします。 from collections import deque def max_area_of_island(grid): rows, cols = len(grid), len(grid[0]) max_area = 0 for i in range(rows): for j in ...

6月18日 17:18 投稿