算法:2.复写零

双指针

1089. 复写零 - 力扣(LeetCode)

解法思路:如图

虽然得到了正确答案,但从5下标开始复写是我们知道答案后看出来的。

但是我们从这知道只要能找到最后一个需要复写的数的下标就行了,因此我们构思出一个这样的代码:

cur和dest从0下标开始从前往后遍历原数组,只要cur遇到0,dest就向前移动2次,否则移动一次,直到dest>=nums.length-1就退出循环(注意,需要判断,如果dest==nums.length,dest=nums.length-1),这时cur也到达最后需要复写的下标。

cur和dest 位置均正确之后复写零问题思路也就结束了

代码实现:

java 复制代码
public void duplicateZeros(int[] arr) {
        int cur=0;
        int dest=-1;
        while(dest<arr.length-1){ //找位置
            if(arr[cur]==0){
                dest+=2;
            }else{
                dest+=1;
            }
            if(dest>=arr.length-1) break;
            cur++;
        }

        while(cur>=0){
            if(dest==arr.length){
                arr[dest-1]=0;
                dest-=2;
            }
            else{
                if(dest>0){
                    if(arr[cur]==0){
                        arr[dest]=0;
                        arr[dest-1]=0;
                        dest-=2;
                    }else{
                        arr[dest]=arr[cur];
                        dest-=1;
                    }
                }
            }
            cur--;
        }
    }
相关推荐
划破黑暗的第一缕曙光13 分钟前
[数据结构]:5.二叉树链式结构的实现1
数据结构
91刘仁德16 分钟前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
青桔柠薯片20 分钟前
数据结构:单向链表,顺序栈和链式栈
数据结构·链表
A懿轩A21 分钟前
【Maven 构建工具】从零到上手 Maven:安装配置 + IDEA 集成 + 第一个项目(保姆级教程)
java·maven·intellij-idea
diediedei28 分钟前
模板编译期类型检查
开发语言·c++·算法
野犬寒鸦31 分钟前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
我爱娃哈哈35 分钟前
SpringBoot + Flowable + 自定义节点:可视化工作流引擎,支持请假、报销、审批全场景
java·spring boot·后端
阿杰学AI38 分钟前
AI核心知识78——大语言模型之CLM(简洁且通俗易懂版)
人工智能·算法·ai·语言模型·rag·clm·语境化语言模型
mmz12071 小时前
分治算法(c++)
c++·算法
XiaoFan0121 小时前
将有向工作流图转为结构树的实现
java·数据结构·决策树