> For the complete documentation index, see [llms.txt](https://stanley7342.gitbook.io/programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stanley7342.gitbook.io/programming/leetcode/283.-move-zeroes.md).

# 283. Move Zeroes

## 題目原文

Given an array `nums`, write a function to move all `0`'s to the end of it while maintaining the relative order of the non-zero elements.

#### Example:

```
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
```

**Note**:

1. You must do this **in-place** without making a copy of the array.
2. Minimize the total number of operations.

## **解題思路**

{% hint style="info" %}

1. 將不是等於0的值往前搬移。
2. 計算補多少0。
   {% endhint %}

## 程式解答

還沒想到更漂亮的解法

```cpp
class Solution {
public:
    void moveZeroes(vector<int>& nums) 
    {
        int p = 0;
        int nonzero = 0;
        
        for (int i = 0; i < nums.size(); i++)
        {
            if (nums[i] != 0)
            {
                nonzero++;
                nums[p++] = nums[i];
            }
        }
        
        for (int i = nonzero; i < nums.size(); i++)
        {
            nums[i] = 0;
        }
    }
};
```
