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

复写零(双指针)

目录

一:题目链接

二:题目思路

三:代码实现


一:题目链接

        题目的要求是把数组中的为零元素复制一个,再依次按照原数组往后排序下去,直到原数组满了为止。

二:题目思路

        首先,我们要找到最后一个要复写的元素,可以利用双指针的思路,先定义一个 cur 指针,初始化为0,再定义一个 dest 指针,初始化为 -1 ;然后让 cur 往后遍历数组,遇到非零元素时,dest ++ ,cur 遇到零元素时, dest += 2 ,直到 dest 达到数组 .length - 1 的位置停止;注意,这会有一个特殊的情况,比如 [ 1 , 0 , 2  , 0 , 3 ] 这样的数组, cur 到达最后一个0位置的时候,dest 会 += 2 到达数组的 .length 的位置,也就是越界了,这种情况我们需要特殊处理。

        其次,当找到最后一个要复写的元素后,我们可以从后往前复写元素,当 cur 位置的元素非零时,cur 位置的元素覆盖 dest 位置的元素,然后 cur 和 dest 都减一;如果 cur 位置的元素为零时,dest 和 dest - 1 的位置复写为 0 ,然后 cur 和 dest 都减一。当然,上面说的一个特殊情况也就是[ 1 , 0 , 2  , 0 , 3 ] 这样的数组,dest位置在 .length 的位置,cur 在最后一个 0 的位置,那么为了迎合上面的处理流程,我们可以把 .length - 1 位置的元素改为0,cur-- ,  dest -=2 即可。

三:代码实现

        //找到第一个要复写的数的下标int cur = 0;int dest = -1;while(cur < arr.length) {if(arr[cur] != 0) {dest++;}else {dest+=2;}if(dest >= arr.length - 1) {break;}cur++;}//处理dest越界的情况if(dest == arr.length) {arr[arr.length - 1] = 0;cur--;dest-=2;}//从后往前复写while(cur >= 0) {if(arr[cur] == 0) {arr[dest] = 0;arr[--dest] = 0;}else {arr[dest] = arr[cur];}cur--;dest--;}

http://www.dtcms.com/a/366029.html

相关文章:

  • 单片机day2
  • 配置时钟分频与倍频
  • 解构复杂财务逆向业务:如何优雅地生成与管理负数单?
  • Python基础(⑥属性装饰器)
  • 你只需输入一句话,MoneyPrinterTurbo直接给你输出一个视频
  • 普通人如何用 AI 提效?5 个低门槛工具 + 3 类场景案例,让 AI 成为日常助手
  • phpstorm 操作git 另外的操作在 我的收藏
  • c#编写的应用程序调用不在同一文件夹下的DLL
  • Java继承
  • c++ zint二维码、条形码开发库
  • c++多线程(1)------创建和管理线程td::thread
  • Python数据分析与处理(二):将数据写回.mat文件的不同方法【超详细】
  • AI+法律:用ERNIE-Bot解析合同条款,识别风险点
  • 进程管理和IPC
  • 常用假设检验方法及 Python 实现
  • 多层环境室内定位系统综述总结
  • 【JavaEE】(22) Spring 事务
  • 苏哒智能会议一体机:让会议管理进入智能时代
  • Java与Vue构建的企业设备资产管理系统,集成后台管理与移动端操作,覆盖设备全生命周期,支持采购、维护、报废等流程,提供完整源码,助力企业高效管控资产
  • 刻意练习实践说明使用手册
  • nginx配置讲解
  • GitLens:VS Code下高效解决代码追溯的Git管理实用插件
  • Spring Boot + Nacos 配置中心示例工程
  • ego(2)---初始轨迹生成后的关键点采样
  • 一文读懂线性回归的灵魂:成本函数 J(w,b) 全解析
  • K8s基于节点软亲和的高 CPU Pod 扩容与优先调度方案
  • 华为OD最新机试真题-二进制差异数-OD统一考试(C卷)
  • 《K8s网络策略与CNI插件交互问题分析:基于真实案例的排查方法》
  • 卷积操作原来分3种
  • (二)文件管理-基础命令-mkdir命令的使用