テストTIL 62日間アルゴリズム/コーディング


アレイ内で最後に0を移動

  • によって与えられたデジタルアレイにおいて、0はアレイの最後の関数に移動する.
  • 元の数字の順序を変更しないでください.
  • 新しい配列を作成しないでください!!
  • I/O例:
    [0,1,0,3,12] => [1,3,12,0,0]
  • 作成

    const moveZeroes = nums => {
      for(let i = nums.length-1; i > -1; i--) {
        if(nums[i] === 0) {
          nums.splice(i, 1);
          nums.push(0);
        }
      }
      return nums;
    }
    問題を見た後、最初の考えはpopやpushを使いたいということです.
    通常使用されるfor文は、インデックス0から、すなわち配列の前面からチェックされるため、popやpushの使用には適していないと考えられるため、配列の後ろからfor文を作成して動作させる.
    慣れが怖いのは元の使い方ではないので、後からfor文を使うときは少し混同しています.
    その後、その要素が0であるか否かを判別し、0であれば配列からその要素を削除する.
    この部分は最初はsliceを使ってカットする形で実現していましたが、結果は思ったほどではなかったのでmdnを検索しました...
    From. MDN slice()メソッドは、配列の開始から終了(終了を含まない)までの浅いコピーを新しい配列オブジェクトに返します。元の案は変わらない。

    sliceはfilter,mapと同様に新しい配列を返す方法である.
    道理で私の考え通りに出力できないと思います.
    次に考えられるのがカット方法なので、カットを使ってみました.
    よく使われる方法ではありませんが、配列に要素を追加・削除する機能があることを知っていたので、今回改めてお馴染みしました.
    これにより,nums.splice(i, 1)を用いて配列内の0を削除し,pushを用いて0を配列の後ろに戻し,関数を完了する.
    私は毎日できるだけ問題を解いていますが、これは役に立ちますか?よくあることです.すぐに成果が出る部分じゃないからそう思う
    しかし、毎回使う方法の新しい点を発見するのは、毎日感じられる進歩だと思います.簡単な部分から一歩一歩やっていくと言う人も多いですが、よくできているようです.