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 に出会った場合は取り出して配列の末尾に置き、右のポインタを 1 つ左に移動します。それ以外の場合は左から右に移動します。

解法#

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
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++;
    }
  }
};

問題リンク#

移動零

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