1.题目
. - 力扣(LeetCode)
2.解题思路
本题要求就是对于一个数组顺序表,将表中的所有“0”元素都向后再写一遍,且我们还要保证此元素之后的元素不受到影响,且复写零之后此数组顺序表的总长度不可以改变,所以溢出的元素直接忽略即可、
所以我给出的思路就是将0元素之后的所有元素都向后移动一格,
空出此被复写的元素所需要的空间,然后对这个被空出来的空间填入0,或者将被复写的元素复制粘贴进去
3.代码
class Solution {
public:
void duplicateZeros(vector<int>& arr)
{
int pre=0,cur=0;
int n=arr.size();
while(pre<n)
{
int end=n-2;
if(arr[pre]==0)
{
while(end>=pre)
{
arr[end+1]=arr[end];//这个while循环的意思就是将被复写的元素之后的所有元素向后移,
//为了避免栈溢出,所以end的初始化为n-2
end--;
}
if(pre+1<n)
{
//arr[pre+1]=arr[pre];//这个意思就是将被复写的元素复制粘贴过来
arr[pre+1]=0;//这个意思就是直接将0填写进入这个被空出的空间
}
pre++;
if(pre>=n)
{
break;
}
}
pre++;
}
}
};
个人做题手稿