算法: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--;
        }
    }
相关推荐
lkbhua莱克瓦242 分钟前
进阶-SQL优化
java·数据库·sql·mysql·oracle
行稳方能走远9 分钟前
Android java 学习笔记 1
android·java
kaico201810 分钟前
多线程与微服务下的事务
java·微服务·架构
zhglhy10 分钟前
QLExpress Java动态脚本引擎使用指南
java
小瓦码J码12 分钟前
使用AWS SDK实现S3桶策略配置
java
范纹杉想快点毕业13 分钟前
欧几里得算法与扩展欧几里得算法,C语言编程实现(零基础全解析)
运维·c语言·单片机·嵌入式硬件·算法
f***241113 分钟前
Bug悬案:技术侦探的破案指南
算法·bug
廋到被风吹走15 分钟前
【Spring】Spring Cloud 配置中心动态刷新与 @RefreshScope 深度原理
java·spring·spring cloud
牧小七16 分钟前
springboot 配置访问上传图片
java·spring boot·后端
Swift社区16 分钟前
LeetCode 472 连接词
算法·leetcode·职场和发展