1,题目要求
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,写一个函数将所有0移动到它的末尾,同时保持非零元素的相对顺序。
注意:
您必须在不制作阵列副本的情况下就地执行此操作。
最小化操作总数。
2,题目思路
对于这道题,我们可以看出,实际上是找出所有为0的数字,并将它们移动到数组的最后位置。
为了保证非0数字的相对位置不变,我们只需要在遍历的过程中找到所有非0的数字,然后将它们依次重新按顺序写在数组之中,最后,在用0将剩余的数组位置填满,就可以完整的得到题目所需要的结果了。
3,代码实现
static auto speedup = [](){
ios::sync_with_stdio(false);
cin.tie(nullptr);
return nullptr;
}();
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int j = 0;
for(int i = 0;i < nums.size();i++)
{
if(nums[i]!= 0)
{
nums[j] = nums[i];
j++;
}
}
for(;j<nums.size();j++)
nums[j] = 0;
return;
}
};