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

アレイの最大スライスを検索| JavaScript


たとえば、配列を入力として受け取り、2つ以下の異なる数値を含む配列の最大スライスを返す関数を作成する必要があるとします。この問題を詳しく調べると、安定したサブ配列をチェックし、元の配列を反復処理する必要があります。

したがって、スライディングウィンドウアルゴリズムはこれに非常に適しています。スライディングウィンドウアルゴリズムを介してこの問題を解決するためのコードは、-

になります。

const arr = [1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 6, 2, 1, 8, 1, 1 ,1 ,1, 8, 1,
1, 8, 8];
const map = {
   length: 0
};
let required = [];
for(start = 0, end = 0; end <= arr.length; ){
   if(map.length > 2){
      if(map[arr[start]] === 1){
         delete map[arr[start]];
         map.length --;
      }else{
         map[arr[start]]--;
      };
      start++;
      }else{
      if(end - start > required.length){
         required = arr.slice(start, end);
      };
      if(map[arr[end]]){
         map[arr[end]]++;
      }else{
         map[arr[end]] = 1;
         map.length++;
      }
      end++;
   }
}
console.log(required);

配列内の任意のポイントで個別の文字の数を格納するためのマップを維持し、各反復で最長のサブ配列の長さを比較し続けました。個別の文字の数が2を超えると、次の安定した配列を検索するために配列を右にスライドしました。

出力

コンソールの出力は-

になります
[
   1, 8, 1, 1, 1,
   1, 8, 1, 1, 8,
   8
]

  1. JavaScriptの配列slice()

    JavaScript配列slice()メソッドは、選択したアイテムの新しい配列をより大きな配列で返します。元のアレイは変更されません。 以下は、配列slice()メソッドのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&

  2. JavaScriptのArray.prototype.find()メソッド。

    Array.prototype.find()メソッドは、配列内の特定の条件を満たす最初の要素値を返します。 以下は、Array.prototype.find()メソッドのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&g