我们的思路是利用类似双指针的方式去解答,来看下代码
class Solution {
public:
void duplicateZeros(vector<int>& arr)
{
int cur = 0, dest = -1, n = arr.size();
while (cur < n)
{
if (arr[cur])
dest++;
else
dest += 2;
if (dest >= n - 1)
{
break;
}
cur++;
}
if (dest == n)
{
arr[n - 1] = 0;
cur--;
dest -=2;
}
while (dest >= 0)
{
if(arr[cur])
{
arr[dest--] = arr[cur--];
}
else
{
arr[dest--] = 0;
arr[dest--] = 0;
cur--;
}
}
}
};