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度のループで入れ替えを行えば処理できる
- これ発想はあったがうまく実装に落とし込めなかった・・・