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

力扣1089题 复写零 双指针解法

2. 复写零

给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。

示例 1:

输入:arr = [1,0,2,3,0,4,5,0]
输出:[1,0,0,2,3,0,0,4]
解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]

示例 2:

输入:arr = [1,2,3]
输出:[1,2,3]
解释:调用函数后,输入的数组将被修改为:[1,2,3]

算法思路

本题使用双指针算法.

如果[从前往后]进行原地复写的话, 由于0会复写两次, 导致没有被复写的数被[覆盖]掉了. 因此我们使用[从后向前]的复写策略.

算法流程

  1. 初始化两个指针cur = 0, dest = -1

  2. 先找到最后一个复写的数, 使cur指向最后一个复写的数, dest指向从后往前复写的起始位置, 应该是数组的最后一个元素的位置.

    • cur < arr.length时, 一直执行下面的循环:

      • 先判断cur位置的值

        • 如果为0, dest向后移动2步
        • 如果不是0, dest向后移动1步
      • 判断dest是否已经到达数组的最后一个元素的位置, 如果到达了, 就终止循环.

      • cur++, 继续判断

  3. 处理边界情况. 判断dest是否发生越界(dest = arr.length):

    如果发生了越界:

    • 让数组arr[arr.length - 1] = 0
    • cur--
    • dest -= 2
  4. "从后向前"完成复写操作, 只要cur >= 0

    • 判断cur位置的值
      • 如果是0: destdest - 1位置的值改为0, dest -= 2
      • 如果不是0: dest位置的值改为cur位置的值, dest--
    • cur--

Java代码

class Solution {public static void duplicateZeros(int[] arr) {int cur = 0, dest = -1;while (cur < arr.length) {if(arr[cur] == 0) {dest += 2;} else {dest++;}if(dest >= arr.length - 1) {break;}cur++;}if(dest >= arr.length) {arr[arr.length - 1] = 0;dest -= 2;cur--;}while (cur >= 0) {if(arr[cur] == 0) {arr[dest--] = 0;arr[dest--] = 0;cur--;} else {arr[dest--] = arr[cur--];}}}
}

时间复杂度: O(N) 空间复杂度O(1)

http://www.lryc.cn/news/248899.html

相关文章:

  • Redis基础与运用
  • PTA:猜帽子游戏 ,C语言
  • ESP32基于IDF框架OTA学习记录
  • 分布式技术(一)分布式的架构的演进
  • webpack 打包优化
  • electron windows robotjs 安装教程
  • IDEA解决Git冲突详解
  • Vue3使用kkFileView预览文件pdf
  • 建造者模式-C语言实现
  • Jmeter+influxdb+grafana监控平台在windows环境的搭建
  • 关注这两点 或能避开一些现货黄金交易的陷阱
  • Python 文件读写
  • 线性分组码的奇偶校验矩阵均匀性分析
  • leetcode算法之链表
  • 2023.11.27 滴滴P0级故障或为k8s升级造成
  • Ubuntu16.04.4系统本地提权实验
  • Vue中使用正则表达式进行文本匹配和处理的方法
  • php许愿墙代码包括前端和后端部分
  • PHP 刷新缓存区的问题!
  • Android Studio Giraffe-2022.3.1-Patch-3安装注意事项
  • 【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法
  • Webpack 懒加载
  • 深度遍历DFS(括号生成,二叉树所有路径)
  • Rational Arithmetic
  • 文心一言4.0(ERNIE-Bot-4)申请方法及简单调用代码示例
  • 年终好价节买什么好?这些数码好物闭眼入
  • webpack对项目进行优化
  • Python edge-tts库全部声音模型一览表
  • 网络编程相关面试题
  • TCP_NODELAY与TCP通信效率