CodeKata | Week 3 Day 4

7192 ワード

質問する


指定した数値配列で、0を配列の最後に移動します.
元の数字の順番を変えないでください.
(新しいアレイは作成しないでください.)
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

初回アクセス

const moveZeroes = nums => {
for (i=0; i<nums.length; i++) {
  if(nums[i]===0){
    nums.push(nums.splice(i, 1)[0])
  }
}
return nums}
うーん、だめ、、、帰る、、、
配列には0が1つしかないのは可能ですが、0が現れた瞬間に終わり、0が2つより大きいとfor loopは回転しません...

2回目のアクセス

const moveZeroes = nums => {
newArr =[]
trashArr =[]
for(i=0; i<nums.length;i++) {
  if(nums[i] !== 0) {
    newArr.push(nums[i])
  } else (trashArr.push(nums[i]))
} 
for(i=0; i<trashArr.length;i++){
  newArr.push(0)
} 
return newArr
};
ほほほ...誰が見てもメモリ時間を無駄にし、余分な長いコードを無駄にしている......もっと短い方法で先にやったに違いない...配列をまっすぐ回し、0をtrashArrに、0をnewArrに、そしてnewArrに置きます.lengthのようです.結果は.🙌 国境を越える🙌
とにかく合格しましたが、そうではないと思いますので、グーグル先生に手伝ってもらい、他の人の方法を探してもらいました.

3つ目の方法

const moveZeroes = nums => {
  for(i = nums.length-1; i >= 0; i--){
    if(nums[i]===0){
      nums.push(nums.splice(i, 1)[0]);
    }
  }
  return nums
};
ああ...後ろから回ればいいんですよね…i=0から変わろうとする偏見はまだ捨てられていないので、ここまでは思いもよらなかった…😭😭