首页 > 编程语言 >【优选算法篇】2----复写零

【优选算法篇】2----复写零

时间:2025-01-22 23:56:25浏览次数:3  
标签:arr cur dest ++ ---- -- 算法 数组 复写

---------------------------------------begin---------------------------------------

这道算法题相对于移动零,就上了一点点强度咯,不过还是很容易理解的啦~

题目解析:

这道题如果没理解好题目,是很难的,但理解题目就容易啦


讲解算法原理:

意思就是:一个数组长度是固定的,里面的元素,只要是0,就需要在原有的基础上,在0的后面多加一个0,以此类推,不为0的数就得往后移动,最后保持原有的数组长度不变,像上图第一个示例的5和0就是因为前面0要写两个,所以要被去掉~

编写代码:

class Solution 
{
public:
    void duplicateZeros(vector<int>& arr) 
    {
        int cur = 0, dest = -1;
        int 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 (cur >= 0) 
        {
            if (arr[cur]) 
            {
                arr[dest--] = arr[cur--];
            } 
            else 
            {
                arr[dest--] = 0;
                arr[dest--] = 0;
                cur--;
            }
        }
    }
};    

我这里实现主要是先遍历一遍数组,如果arr【cur】为非0,则dest走一步,cur++,如果为0,dest则走两步,直到dest到达最后一位,则break,此时cur的位置则为0复写后数组的最后一位数。

注意:在这里需要注意越界问题,如下图:

有一个0越界,直接n-1位置变为0,然后cur--,dest-=2即可!!!

------------------------------------end--------------------------------------------

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=efemb1p0jkd

标签:arr,cur,dest,++,----,--,算法,数组,复写
From: https://blog.csdn.net/2401_86275172/article/details/145271226

相关文章

  • 数组+贪心算法
    Problem:你可以获得的最大硬币数目思路用贪心思想考虑,在每一轮操作中,把最大的给Alice,如何把当前数组中次大的给自己,如何把最小的给Bob。以此类推,把数组的最小的三分之一给Bob即可,然后把剩下的交叉给Alice和自己。CodeclassSolution{publicintmaxCoins(int[]piles)......
  • 洛谷OI_树的刷题笔记
    整个笔记注意力惊人,慎入......持续更新。P2700逐个击破能卡住我的黄题已经很少见了,但这道题确实又是一个。唉,只能说自己依然是蒟蒻吧。不过,由于题目很容易理解,加上自己因为刷难题身心俱疲,“玩”一下这种简单的题目也算是种放松。不能因为刷题,把自己学算法的乐趣搞没了。先......
  • 2024宁波大学移动应用开发复习纲要
    开发Android1.1小节有哪几层,内核层基于java,应用架构层的话,使用的是APIP41.1.3小节四大组件和活动javaJDK如何搭建框架SDK包含了哪些内容P6如何装SDK图1.1.2装完之后,如何进行相应的配置P9创建第一个Android项目,该如何创建图1.10application类和其他的类(其......
  • 《人月神话》读书笔记:探寻软件开发的真理与智慧
    阅读《人月神话》,仿佛开启了一场与软件开发领域先辈的深度对话,书中对软件开发过程中诸多复杂问题鞭辟入里的剖析,为我带来了前所未有的启发与思考。书中提出的“人月神话”概念,彻底颠覆了我以往对软件开发人力与时间关系的简单认知。它指出,在软件开发项目中,人力和时间并非可以随......
  • Bear and Bad Powers of 42 题解
    题目描述定义一个正整数是坏的,当且仅当它是\(42\)的幂次,否则它是好的。给定长为\(n\)的序列\(a_i\),保证初始所有数都是好的。接下来\(q\)次操作:1i:查询\(a_i\)。2lrx:将\(a_l,\cdots,a_r\)赋值为一个好的数\(x\)。3lrx:将\(a_l,\cdots,a_r\)加上\(......
  • go语言中的ew函数介绍
    在Go语言中,new是一个内建函数,用于分配内存并返回一个指向新分配的零值的指针。其主要作用是创建一个类型为T的新变量,并初始化为该类型的零值,返回指向这个变量的指针。它的语法和基本使用方法如下:new函数的基本语法new(T)T是你想要创建的新变量的类型。new(T)返回的......
  • [ARC178C] Sum of Abs 2 题解
    首先想到能不能用差分搞搞,但是给自己绕进去了/kel我们不妨给\(\{b_L\}\)定个不降的序(如果打在数轴上,显然序和答案无关),于是可以拿掉绝对值。注意到这个和式(记其结果为\(x\))中每个\(b_i\)的贡献系数\(c_i=2i-L-1\),于是有:\[x=\sum_{i=1}^{L}b_ic_i\]直接做不......
  • 神经网络数学原理(3)正则项和超参数
    在上一节【神经网络数学原理(2)反向传播】中已经讲述如何通过反向传播来优化权重的过程和数学原理,本章主要讲述参数优化,优化参数是机器学习和深度学习中至关重要的过程,其目的是通过调整模型的权重、偏置和超参数来提升模型的准确性和泛化能力。优化的最终目标是使模型能够从训练数据......
  • 动态代理
    一、什么是动态代理?现在要给eat方法增加其它功能,例如吃饭之前添加拿筷子,盛饭。在已有的代码中插入,直接修改代码,我们叫做侵入式修改。而在一个成熟的项目中,这样做是很危险的,可能全崩啦!此时想要增加额外的功能而又不能修改原有代码,如何去做呢?此时我们可以找一个代理先帮我们做......
  • 转义引号
    问题需要保证文本或二进制数据对于查询是安全的。解决方案使所有查询都使用占位符,这样prepare()和execute()就能对字符串完成转义。使用占位符的不同方法。如果需要自行转义,可以使用PD0::quote()方法。在极少数情况下,可能希望对来自用户输入的SQL通配符进行转义。手动加引号$......