Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptのバイナリ行列で最も近い0の距離


バイナリ行列は、0または1のみを含む配列の配列です。バイナリ行列を唯一の引数として受け取るJavaScript関数を作成する必要があります。

この関数は、同じ数の行と列を含む新しい行列を作成する必要があり、元の行列の各要素について、結果の行列には、元の行列の0からのその要素の最も近い距離が含まれている必要があります。

距離を計算するときは、斜めではなく水平または垂直に移動できることに注意する必要があります。また、マトリックスに少なくとも1つの0が含まれていることが保証されています。

例-

入力行列が-

の場合
const arr = [
   [0, 0, 0]
   [0, 1, 0]
   [1, 1, 1]
];

その場合、出力行列は-

になります。
const output = [
   [0, 0, 0]
   [0, 1, 0]
   [1, 2, 1]
];

このためのコードは-

になります
const arr = [
   [0, 0, 0],
   [0, 1, 0],
   [1, 1, 1],
];
const findNearestDistance = (arr = []) => {
   let array = [];
   let res = arr.map((el, ind) => el.map((subEl, subInd) => {
      if (subEl === 0) {
         array.push([ind, subInd])
         return 0
      };
      return Number.MAX_SAFE_INTEGER;
   }));
   const updateAdjacent = (ind, subInd, min, array = []) => {
      if (ind < 0 || subInd < 0 || ind == arr.length || subInd == arr[0].length){
         return;
      };
      if (res[ind][subInd] < min + 2) return
         res[ind][subInd] = min + 1
         array.push([ind, subInd])
   };
   while (array.length) {
      let next = []
      for (let [ind, subInd] of array) {
         updateAdjacent(ind, subInd + 1, res[ind][subInd], next)
         updateAdjacent(ind, subInd - 1, res[ind][subInd], next)
         updateAdjacent(ind + 1, subInd, res[ind][subInd], next)
         updateAdjacent(ind - 1, subInd, res[ind][subInd], next)
      };
      array = next;
   }
   return res;
};
console.log(findNearestDistance(arr));

出力

そして、コンソールの出力は-

になります
[ [ 0, 0, 0 ], [ 0, 1, 0 ], [ 1, 2, 1 ] ]

  1. Javascriptの二分探索木

    二分探索木は特別な動作を示します。ノードの左の子はその親の値よりも小さい値である必要があり、ノードの右の子はその親の値よりも大きい値である必要があります。 このセクションでは、主にそのような木に焦点を当てます。 二分探索木の操作 二分探索木で次の操作を定義します- キーをツリーに挿入する ツリー内の順序どおりの走査 ツリーでトラバーサルを事前注文する ツリー内のポストオーダートラバーサル ツリー内の値の検索 ツリーで最小値を検索する ツリーで最大値を検索する ツリーのリーフノードを削除する

  2. Javascriptのバイナリツリー

    バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。バイナリツリーには、検索が並べ替えられた配列と同じくらい高速であり、挿入または削除操作がリンクリストと同じくらい高速であるため、順序付き配列とリンクリストの両方の利点があります。 これは、以下で説明するいくつかの用語を含む二分木の図です- 重要な用語 以下は、ツリーに関する重要な用語です。 パス −パスとは、ツリーのエッジに沿ったノードのシーケンスを指します。 ルート −ツリーの最上部にあるノードはルートと呼ばれます。ツ