FRTKL

283. Move Zeroes (Easy)

Problem

https://leetcode.com/problems/move-zeroes/

配列を指定してnums、0ゼロ以外の要素の相対的な順序を維持しながら、すべてを配列の最後に移動する関数を記述します。

例:

入力: [0,1,0,3,12] 出力: [1,3,12,0,0] 注:

これは、配列のコピーを作成せずにインプレースで行う必要があります。 操作の総数を最小限に抑えます。

  • 整数の配列 nums が与えられたとき、最大の和を持つ連続する部分配列(少なくとも1つの数を含む)を見つけ、その和を返す
    • input: [-2,1,-3,4,-1,2,1,-5,4]
    • output: 6

Solution

Go

func moveZeroes(nums []int)  {
    nonZeroIndex := -1
    for i := 0; i < len(nums); i++ {
        if nums[i] != 0 {
            nonZeroIndex++
            nums[i], nums[nonZeroIndex] = nums[nonZeroIndex], nums[i]
        }
    }
}

PHP

class Solution {

    /**
     * @param Integer[] $nums
     * @return NULL
     */
    function moveZeroes(&$nums) {
        foreach($nums as $key => $num) {
            if ($num === 0) {
                unset($nums[$key]);
                $nums[] = 0;
            }
        }
        
        return $nums;
    }
}

Impression

  • PHPは0を動かすパターン。Goは0以外を動かすパターン。
  • 0以外を動かすパターンは
    1. 左から順に値を見ていく
    2. 0以外の数字がきた場合は「nonZeroIndex(0ではないindex。初期値は-1)」と場所を入れ替えつつ、nonZeroIndexをincrementしていく(つまり左から順に確定していく)
  • PHPの方は簡単だった
Written By Fukuaki TAKANO
fortkle icon

Engineering Manager at Connehito inc.
Please contact me via twitter. @fortkle