题目:
思路:
代码实现
class Solution
{
public:
void duplicateZeros(vector<int>& arr)
{
//1.模拟异地操作
int prev=0,cur=0;
int len=arr.size();
while(cur<len)
{
//arr[prev]不是0就都走一步
if(arr[prev]!=0)
{
prev++;
cur++;
}
//arr[prev]是0就prev走一步,cur走两步
else
{
prev++;
cur++;
cur++;
}
}
//prev停下来的位置就是异地操作最后元素的下一个位置,cur指向数组大小的下一个位置
prev--;
cur--;
//1.5.特殊处理
if(cur==len)
{
cur--;
arr[cur]=0;
cur--;
prev--;
}
//2.倒序复写0操作
while(cur>=0)
{
//arr[prev]不是0就都走一步
if(arr[prev]!=0)
{
arr[cur]=arr[prev];
prev--;
cur--;
}
//arr[prev]是0就prev走一步,cur走两步
else
{
arr[cur]=arr[cur-1]=arr[prev];
prev--;
cur--;
cur--;
}
}
}
};