当前位置: 首页 > 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.xdnf.cn/news/1447885.html

相关文章:

  • JavaScript学习最后一章节(小练习)
  • 如何解决虚拟机网络连接问题:配置固定 IP 篇
  • Spring Authorization Server 1.5.2 使用YML配置的方式,最常用法总结
  • 【算法--链表】141.环形链表(通俗讲解链表中是否有环)
  • 分布式AI算力系统番外篇-----超体的现世《星核》
  • 强化学习中的模仿学习是什么?
  • 相关性分析与常用相关系数
  • react的 hooks 是如何存储的
  • HTML第七课:发展史
  • Streamlit 数据看板模板:非前端选手快速搭建 Python 数据可视化交互看板的实用工具
  • 如何画时序图、流程图
  • android集成unity后动态导入 assetsBundle
  • Android创建demo脚本
  • CSS中使用 HSL(Hue, Saturation, Lightness) 动态生成色值
  • Linux 对目录授予用户读写权限的方法
  • 信创MySQL到达梦数据库的SQL语法转换技术解析
  • AWK命令完全指南:从理论到实战的文本处理利器
  • Spring Boot + Nacos 配置中心示例工程
  • tcpdump用法
  • Best Video网页官网入口 – 免费在线网页视频解析下载器
  • 认识HTML
  • 用资产驱动方法构建汽车网络安全档案
  • VPS云服务器安全加固指南:从入门到精通的全面防护策略
  • TypeScript 内置工具类型大全(ReturnType、Omit、Pick 等)
  • 【Unity项目经验分享】实现左右分屏裸眼3D程序
  • 数据结构之加餐篇 -顺序表和链表加餐
  • 从 0 到 1 实现 PyTorch 食物图像分类:核心知识点与完整实
  • 基础看门狗--idf开发esp32s3
  • PNP具身解读——RSS2025论文加州伯克利RLDG: 通过强化学习实现机器人通才策略提炼。
  • 基于物联网的智慧用电云平台构建与火灾防控应用研究