# 【LeetCode】 283. Move Zeroes ## Description > 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. > Note: > You must do this in-place without making a copy of the array. > Minimize the total number of operations. > 給一數字陣列nums,請撰寫一個function將所有的0移到非零數的後面。 > 注意:你應該要更改原陣列而不是複製一份新的。 > 盡可能最小化你的步驟。 ## Example: ``` Example: Input: [0,1,0,3,12] Output: [1,3,12,0,0] ``` ## Solution * 先記錄原陣列大小,跑一次將`0`移除,再將`0`加回陣列的尾巴直到陣列大小回復。 * 時間複雜度為O(n)。 * 原本以為使用erase會導致速度緩慢,不過實際出來的結果還不錯。 ### Code ```C++=1 class Solution { public: void moveZeroes(vector<int>& nums) { int s = nums.size(); int count = 0; for(int i = 0;i<s-count;) { if(nums[i]==0) { nums.erase(nums.begin()+i); count++; } else i++; } for(int i = 0;i<count;i++) nums.push_back(0); } }; ``` ###### tags: `LeetCode` `C++`