自学内容网 自学内容网

力扣双指针算法题目:复写零

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++;
        }
    }
};

个人做题手稿


原文地址:https://blog.csdn.net/m0_73426459/article/details/140217711

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!