具体思想:
先找到能到达的最大情况,然后反向向后移;
具体代码:
class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int i=0,j=0;
int n=arr.size();
bool flag=true;
while(j<n){
flag=false;
if(arr[i]==0){
flag=true;
if(j+1<n){
j++;
flag=false;
}
}
i++,j++;
}
i--,j--;
while(i>=0){
if(arr[i]==0){
arr[j]=0;
if(flag){
flag=false;
i--,j--;
continue;
}
arr[--j]=0;
}else{
arr[j]=arr[i];
}
i--,j--;
}
}
};
/*
1,2,0,0,1
1,2,0,0,0
*/