算法: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--;
        }
    }
相关推荐
zhanghaha13144 分钟前
HTML系列教程:14_HTML 表单与输入框 <form>、<input> 零基础详解
java·前端·javascript
Dola_Zou5 小时前
工厂智能排产软件算法保护与按产线计费实战
算法·自动化·软件工程·软件加密
yxlalm5 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风6 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
Seoyoneh6 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人7 小时前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
啦啦啦啦啦zzzz7 小时前
Logger的组装(c++20)
c++·算法·c++20
tryxr7 小时前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei7 小时前
Java 写 Agent:模型只是组件
java·开发语言
尾善爱看海8 小时前
前端算法与手写题集
前端·算法