banner
Koresamuel

Koresamuel

Sometimes ever, sometimes never.
github
twitter
email

283.モバイルゼロ

問題の説明#

与えられた配列 nums に対して、すべての 0 を配列の末尾に移動させる関数を作成し、非ゼロ要素の相対的な順序を保持します。

注意してください、配列をコピーせずにインプレースで配列を操作する必要があります。

例 1:

入力: nums = [0,1,0,3,12]
出力: [1,3,12,0,0]

例 2:

入力: nums = [0]
出力: [0]

ヒント:

1 <= nums.length <= 10^4
-2^31 <= nums[i] <= 2^31 - 1

考え方#

  1. 最も簡単なのは、一度の走査で 0 に出会ったら配列の最後に置くことですが、そうすると新しい配列スペースを開放することになります。
  2. 2 つのポインタを使用して、左から右に走査し、0 に出会ったら取り出して配列の末尾に置き、右ポインタを左に一歩移動させます。そうでなければ、左から右に移動します。

解答#

/**
 * @param {number[]} nums
 * @return {void} 何も返さず、代わりに nums をインプレースで修正します。
 */
var moveZeroes = function(nums) {
  let l = 0, r = nums.length;
  while (l < r) {
    if (nums[l] === 0) {
      nums.push(nums.splice(l, 1));
      r--;
    } else {
      l++;
    }
  }
};

問題リンク#

ゼロを移動

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。