1. 程式人生 > >【LeetCode】移動零問題

【LeetCode】移動零問題

給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]

說明:

  1. 必須在原陣列上操作,不能拷貝額外的陣列。
  2. 儘量減少操作次數。

class Solution
{
    public void moveZeroes(int[] nums)
    {
        int lastindex = nums.length-1;
        int moveindex = nums.length-1;
        int key=0;

        while(moveindex>=0)
        {
            if(nums[moveindex]==0)
            {
                key=lastindex-moveindex;

                for(int i=0;i<key;i++)
                {
                    nums[moveindex + i] = nums[moveindex + i + 1];
                }
                nums[lastindex]=0;
                lastindex--;
            }
            moveindex--;
        }
    }
}

public class Main
{
    public static void main(String[] args)
    {
        int [] nums = {0,1,0,3,12};
        new Solution().moveZeroes(nums);
        for (int i=0;i<nums.length;i++)
            System.out.print(nums[i]+" ");
    }
}

思路:定義兩個儲存下標的欄位lastindex和moveindex,作為遍歷陣列的索引,moveindex從後向前遍歷直到陣列中元素為0,然後根據lastindex與moveindex之間的差值,將已經遍歷的部分的元素前移,再將lastindex位置的元素置為0。