JavaScriptを使用したLeetCodeの「ゼロ移動」の解決


だから私は私のソリューションにどのようにleetcodeの“移動ゼロ”の問題を解決するために取得する前に、私はただ何か超明らかにしたい.常にあなたの指示を読んでください!今、あなたは自分自身に言っているかもしれません、しかし、マックスは、もちろん、1つの指示を読んでください!なぜあなたは何か明らかに?しかし、私は成長の一部はあなたの過ちから学んでいることを教えてみましょう.この問題を解決するために、最初にこの手順を読み、例を見てみました.

Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements.

Note that you must do this in-place without making a copy of the array.

Example 1:

Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]

Example 2:

Input: nums = [0]
Output: [0]

Constraints:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

それで、私は何をしましたか?例を見てから見た[1,3,12,0,0] ゼロが最後まで動かされた順番でソートされたので、私の最初の数回のまわりで、私は私のものを分類しましたnums ゼロを動かす前の配列!

うん、物語の教訓:常にあなたの指示を読んでください!実際には、私は、指示を読んで、例を見て、再度指示を読んでお勧めします!なぜなら、あなたがすぐに見て、自分自身に言うとしても、「ああ!何か見逃したかもしれない.
ので、サイドバー脇、実際の問題を解決する方法について話しましょう!
では、もう一度問題を見てみましょう.

Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements.

Note that you must do this in-place without making a copy of the array.

Example 1:

Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]

Example 2:

Input: nums = [0]
Output: [0]

Constraints:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

それで、ゴールは何ですか?という配列が与えられますnums そして、その配列をとって、どんなゼロも除いてすべてを残す必要があります0 ), 配列の最後まで移動します.これは配列のコピーを作成しない間です.
まず最初に、非ゼロを追跡する変数を作成します.「非ゼロ」と呼びましょう.
var moveZeroes = function(nums) {
    let nonZero = 0;
};
クール.だから今我々はnonZero 変数を通してループしましょうnums 非ゼロを探す配列.我々は、シンプルでこれを達成することができますfor ループ.配列の現在の要素がゼロに等しくない場合0 ), 現在のインデックスに設定できますnonZero それからインクリメントnonZero 続ける
var moveZeroes = function(nums) {
    let nonZero = 0;
    for(let i=0; i < nums.length; i++){
        if(nums[i] !== 0){
            nums[nonZero] = nums[i];
            nonZero++;
        };
    };
今、私たちのゼロの世話をするために、我々は別のループを使用するつもりです.
注意:これは独立した非入れ子ループであり、これは最終的にO(2 n)時間の複雑さに対する解決を維持します.
このループは、nonZero インデックスとこれらの要素を適切なゼロに置き換えると、以下のようになります.
    for(let i = nonZero; i < nums.length; i++) {
        nums[i] = 0;
    };
解決策は次のようになります.
var moveZeroes = function(nums) {
    let nonZero = 0;
    for(let i=0; i < nums.length; i++){
        if(nums[i] !== 0){
            nums[nonZero] = nums[i];
            nonZero++;
        };
    };

    for(let i = nonZero; i < nums.length; i++) {
        nums[i] = 0;
    };
};
しかし、再び、おそらくこのポストから取るために最も重要なことは、それはあなたに多くの時間と複雑さを保存するので、一度以上の指示をお読みください!(😂)