【算法】双指针(二)复写零

目录

一、题目介绍

二、双指针原理

1.当前维护指针

1.2维护要求

(1)不能覆盖掉未产效元素

三、提交代码


一、题目介绍

1089. 复写零 - 力扣(LeetCode)


二、双指针原理

扩容遍历指针当前维护指针 从小维护到大

1.当前维护指针

1.1维护方向-双指针(一)移动零

1.2维护要求

(1)不能覆盖掉未产效元素

超前式覆盖 就从结果后位开始 往回 ++变回++ ++在后追赶++ 逆序维护


三、提交代码

java 复制代码
public void duplicateZeros(int[] arr) {
    //省去维护的覆盖 到结果后位,就成直接数步子了:
    int cur = 0;
    int dest = 0;
    while(dest < arr.length) {
        if(arr[cur] == 0) {
            dest += 2;
        }else {
            dest += 1;
        }
        cur++;
    }

    //从结果后位开始 往回在后追赶 逆序维护:
    if(dest == arr.length) {
        //两指针指向的 都是自然再向后移动到的,指向的 并未展开 对着覆值操作的,此时都往回一步就到 数组末尾操作值位置
        dest--;
        cur--;
    }
    if(dest > arr.length) {
        dest--;
        cur--;
        //两指针都往回移回一步后 就可以对着开始 往回覆值操作了,但这里dest指向的是越界处,得手动 覆值调一下
        arr[dest - 1] = arr[cur];//一定是之前cur指向了0的连续导致的,往回一步后的此时arr[cur]一定是0,连续覆两次
        dest -= 2;
        cur--;
    }
    while(cur >= 0) {
        if(arr[cur] == 0) {
            arr[dest] = 0;
            arr[dest-1] = 0;
            dest -= 2;
        }else {
            arr[dest] = arr[cur];
            dest--;
        }
        cur--;
    }
}
相关推荐
胖达不服输7 小时前
「日拱一码」081 机器学习——梯度增强特征选择GBFS
人工智能·python·算法·机器学习·梯度增强特征选择·gbfs
初级炼丹师(爱说实话版)8 小时前
2025算法八股——深度学习——优化器小结
人工智能·深度学习·算法
滴滴滴嘟嘟嘟.8 小时前
Qt UDP通信学习
qt·学习·udp
努力的小帅8 小时前
C++_哈希
开发语言·c++·学习·算法·哈希算法·散列表
Christo38 小时前
TFS-2023《Fuzzy Clustering With Knowledge Extraction and Granulation》
人工智能·算法·机器学习·支持向量机
过河卒_zh15667668 小时前
AI内容标识新规实施后,大厂AI用户协议有何变化?(二)百度系
人工智能·算法·aigc·算法备案·生成合成类算法备案
zzZ65658 小时前
支持向量机(SVM)学习报告
学习·机器学习·支持向量机
薰衣草23339 小时前
滑动窗口(2)——不定长
python·算法·leetcode
金融小师妹11 小时前
基于哈塞特独立性表态的AI量化研究:美联储政策独立性的多维验证
大数据·人工智能·算法