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-2end--;}if(pre+1<n){//arr[pre+1]=arr[pre];//这个意思就是将被复写的元素复制粘贴过来arr[pre+1]=0;//这个意思就是直接将0填写进入这个被空出的空间}pre++;if(pre>=n){break;}}pre++;}}
};
个人做题手稿