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.
For example, given nums = [0, 1, 0, 3, 12]
, after calling your function, nums
should be [1, 3, 12, 0, 0]
.
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
把0搬到后面去,同时保证in-place,顺序也不能变。如果可以创一个新的vector话就太简单啦~~
我的思路就是把第一个0和0之后的第一个非0交换一下,想想简单,实现了半天(太菜啦;))
class Solution { public: void moveZeroes(vector<int>& nums) { int size = nums.size(); int j = 0; for(int i = 0; i < size; ++i) { if(nums[i] != 0) { swap(nums[i], nums[j]); ++j;//前端第一个为0的位置 } } } };
再贴一个很好的方法
class Solution { public: void moveZeroes(vector<int>& nums) { int j = 0; // move all the nonzero elements advance for (int i = 0; i < nums.size(); i++) { if (nums[i] != 0) { nums[j++] = nums[i]; } } for (;j < nums.size(); j++) { nums[j] = 0; } } };