温馨提示:本篇文章适合刚开始练算法的小白,大佬若见勿嘲
题目
题目解析
遇到0写两遍,非0写一遍,其余非零数右移即可
编写原理
第一步找到最后一个被复写的数
先根据题目所给的例子找到最后一次要复写的数字
20240923_142843
第二步特殊情况处理
特殊情况就是当数组内的所有元素全为0时
20240923_143852
20240923_144056
第三步复写数字
从后往前依次复写
20240923_144745
代码编写
class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int cur = 0, dest = -1;
while(cur < arr.size())
{
if(arr[cur] != 0) dest++;
else
dest += 2;
if(dest >= arr.size() - 1)
break;
cur++;
}
if(dest == arr.size())
{
arr[arr.size() - 1] = 0;
dest -= 2;
cur--;
}
while(cur >= 0)
{
if(arr[cur]) arr[dest--] = arr[cur--];
else
{
arr[dest--] = 0;
arr[dest--] = 0;
cur--;
}
}
}
};