算法: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--;
        }
    }
相关推荐
FQNmxDG4S3 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
超级码力6663 小时前
【Latex文件架构】Latex文件架构模板
算法·数学建模·信息可视化
穿条秋裤到处跑3 小时前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
Merlos_wind4 小时前
HashMap详解
算法·哈希算法·散列表
虹科网络安全4 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje4 小时前
Java语法进阶
java·开发语言·jvm
汉克老师4 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
rKWP8gKv74 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫4 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287924 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日