给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序
注意事项
1.必须在原数组上操作
2.最小化操作数
您在真实的面试中是否遇到过这个题?
Yes
样例
给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0].
/*
这个也可以通过oj
不过时间复杂度比较高
class Solution {
public:
/**
* @param nums an integer array
* @return nothing, do this in-place
*/
/*
void moveZeroes(vector<int>& nums) {
// Write your code here
int length=nums.size();
for(int j=0;j<length;j++){
for(int i=0;i<length-1-j;i++){
if(nums[i]==0){
//如果当前元素等于0的话,这个元素和下一交换 不管下一个什么什么,一次循环可以确定的是,是最后一个元素编程0
int temp=nums[i];
nums[i]=nums[i+1];
nums[i+1]=temp;
}
}
}
}
};
*/
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int pw = 0;
for (int pr = 0; pr < nums.size(); pr++) {
if (nums[pr] != 0) {
nums[pw] = nums[pr];
pw++;
}
}
// 再把pw指向的元素后面的0补上
for (; pw < nums.size(); pw++) {
nums[pw] = 0;
}
}
};