当前位置: 首页 > news >正文

双指针2:1089. 复写零

链接:1089. 复写零 - 力扣(LeetCode) 

双指针的基本思想:

首先根据异地操作确定指针的基本步骤,再将异地操作优化成原地操作的双指针解法

题解:

异地操作:

fast指针指向原数组,slow指向新数组。fast指针遍历原数组,如果fast遇到0,slow指针位置和其下一位置都为0,slow+=2;如果fast遇到非0,slow指针位置拷贝该非0元素,slow+=1。当slow超过数组大小时停止。

优化后的双指针本地操作:

fast和slow初始都为0,fast指针遍历数组,如果fast遇到0,slow位置及其下一位置都为0,slow+=2。但是很明显这样是行不通的,因为slow连续两个位置都是0,会覆盖还没有被fast遍历的元素,因此必须另辟蹊径。

逆序进行双指针操作,但是由于不能在超过数组长度的位置复写,所以要先确定最后一个复写的数。首先使用双指针正向遍历数组,不做任何操作,仅仅确定最后一个复写数的位置,让fast遍历数组,遇到0,slow+=2,遇到非0.slow+=1,当slow到达n-1位置时停止,不做复写操作。此时fast和slow都确定好了位置,从此处开始逆向复写数组,解决问题。

(注意:使用双指针正向遍历数组确定最后一个复写数位置时,当最后一个复写数为0时,slow会越界,因此必须进行额外处理,如果最后一个复写数为0,在逆序复写时,只将slow-1的位置复写为0,因为slow位置越界了)

class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        //确定逆序开始的位置
        int fast = 0, slow = -1;
        int n = arr.size();
        for (; fast < n; fast++)
        {
            if (arr[fast] == 0) slow += 2;
            else slow += 1;
            if (slow >= n-1) break;
        }
        //处理边界条件
        if (slow == n)
        {
            arr[slow - 1] = 0;
            slow -= 2;
            fast -= 1;
        }
        //逆序复写0
        for (; slow >= 0; fast--)
        {
            if (arr[fast] != 0)
            {
                arr[slow] = arr[fast];
                slow -= 1;
            }
            else
            {
                arr[slow] = arr[slow - 1] = 0;
                slow -= 2;
            }
        }
    }
};

相关文章:

  • #6【TIP2023】Dif-Fusion
  • CSS 真的会阻塞文档解析吗?
  • android studio 中止了一个已建立的连接
  • 线程的状态
  • 结构化需求分析SA
  • JavaWeb开发入门:从前端到后端的完整流程解析
  • vue3按钮级别权限处理,自定义指令
  • redis主从哨兵模式+Lua报错-READONLY You can‘t write against a read
  • Java之异常体系
  • Java Set实现类面试题
  • IP----访问服务器流程
  • 解密 Token:大模型如何解析中英文文本
  • 基于 Python 和 Django 的文本情感分析系统设计与实现
  • 音视频容器格式
  • 智能证件照处理器(深度学习)
  • IRI 2016 模型在线版 MATLAB
  • JMeter
  • Java IO 流:从入门到实践
  • 基于javaweb的SpringBoot社区维修平台设计和实现(源码+文档+部署讲解)
  • 如何用Python开发一款可以标注课标单词的工具
  • 常宁网站建设/搜索引擎优化排名技巧
  • 做网站 挣广告联盟的佣金/搜索引擎优化自然排名的优点
  • 哪个网站有天天做股市直播的/搜索引擎和浏览器
  • 腾讯云如何做网站/百度广告联盟点击一次多少钱
  • 北京市住房与城乡建设委员会网站/亚马逊跨境电商
  • 网站在建设中无法访问/武汉网站seo推广公司