Note:
从后往前写,首先开个计数的,遍历数组,遇到0了,计数的指针就走两个,一直走到最后算结束
然后从最后开始往前写,每次如果i
位置不是0就直接写回去,如果是0就放两个0,一直写到i
回到最开头,然后break掉
代码如下:
class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int n = arr.size(), cnt = 0;
arr.push_back(0);
for(int i = 0; i < n; i ++){
if(arr[i]) cnt ++;
else cnt += 2;
if(cnt >= n){
for(int j = cnt - 1; i >= 0; i --){
if(arr[i]) arr[j --] = arr[i];
else{
arr[j --] = 0;
arr[j --] = 0;
}
}
break;
}
}
arr.pop_back();
}
};