Leetcode Note: Go - Move Zeros

Move Zeroes - LeetCode
https://leetcode.com/problems/move-zeroes/

  • Go 言語で取り組んだメモ

所感

  • int 配列の nums が渡ってくる
  • 配列には 0 が含まれているので、それらの 0 を配列の最後に移動する

回答

Move Zeroes - LeetCode
https://leetcode.com/problems/move-zeroes/solution/

func moveZeroes(nums []int)  {
    s := []int{}

    for i := 0; i < len(nums); i++ {
        if nums[i] != 0 {
            s = append(s, nums[i])
        }
    }
    
    for i := 0; i < len(nums); i++ {
        if i < len(s) {
            nums[i] = s[i]
        } else {
            nums[i] = 0
        }
    }
}
  • slice でゼロ以外の数をスタック
  • slice でスタックしたゼロ以外の数を使って nums を再構築していき、スタック以外の値は 0 とすれば最終的に帳尻が合う

Idiomatic Go Solution - LeetCode Discuss
https://leetcode.com/problems/move-zeroes/discuss/724397/Idiomatic-Go-Solution

func moveZeroes(nums []int)  {
    nonZeroIndex := 0
    for i := 0; i < len(nums); i++ {
        if nums[i] != 0 {
            nums[i], nums[nonZeroIndex] = nums[nonZeroIndex], nums[i]
            nonZeroIndex++
        }
    }
}
  • 2倍くらい速い別海
  • そもそも1度のループで入れ替えを行えば処理できる
    • これ発想はあったがうまく実装に落とし込めなかった・・・