C++ 优先算法——复写零(双指针)

目录

题目:复写零

1. 题目解析

2. 算法原理

一. 先找到最后一个“复写”数

处理边界情况

二. 复写操作

3. 代码实现


题目:复写零

1. 题目解析

题目截图:

该题目要求的与移动零相似,都要在一个数组上进行操作,它还要要求的是,这个数组长度大小不会被改变,在原有的数组上遇到0就复写一遍,遇到非零就不用复写。

这道题直接上来就在一个数组上考虑情况稍微会困难一些,可以假设让它可以开辟额外一个数组(两个数组)来考虑,最后在结合双指针到一个数组上会好解答。

 

 题目大致情况双数组的话是上图所示,接下来转化到一个数组上双指针操作。

2. 算法原理

上述的介绍,这道题也是用双指针算法,不过这种双指针算法是先根据“异地“操作(也就是在额外开辟的数组操作),然后优化成双指针下的”就地“操作(在当前数组操作,不额外开辟数组)。

融入一个数组上就是:

 但是这出现了一个问题,下面cur就指向0了,遇0是要复写一遍的(也就是要写两遍)

 此时,就造成数据被覆盖导致丢失数据了,所以顺序遍历数组操作还是有问题的,要解决此问题,可以考虑尝试逆序操作。

然后按照上面逻辑,遇到0就抄写两遍,遇到非零直接抄写一遍即可,再统一向后移动1位。 

 

这样可以避免出现顺序时候后面未被复写的数据被覆盖的情况了。

大致思路如上面图所示,归纳一下:

一. 先找到最后一个“复写”数

这个也要用双指针算法来去寻找它,我们把dest定义为最后需要复写的位置(结果中数组最后一个位置),因此刚开始时,并不知道最后位置在哪,让dest指向-1;cur的作用:从前往后遍历数组,决定dest走1步还是2步。所以可以仅需要判断dest是否走向最后位置来判断是否找到最后要复写的数。

// 先找到最后一个要复写的数
int dest = -1; // 复写位置
int cur = 0;   // 遍历数组
while (cur < arr.size()) {if (arr[cur] == 0) {  //遇到0,dest移动两位dest += 2;}else {++dest;}if (dest >= arr.size() - 1) {  //判断dest是否走向结尾break;}++cur;
}

处理边界情况

也就是说,因为遇到0,dest要加2,这样的话会导致上图情况。越界时,一定是cur等于0导致的,所以就可以单独处理它。

//单独处理边界情况--cur走到最后要复写的数为0,dest复写就导致越界访问的情况
if (dest == arr.size()) {arr[arr.size() - 1] = 0;--cur;dest -= 2;
}

总结:

  1. 先判断cur的值(是0或非0元素)
  2. 根据cur的值决定dest向后移动1步或2步。
  3. 先判断dest是否已经走到结束的位置
  4. 判断后,若没有结束,cur再向后移动1位
  • 特殊情况,cur走到最后要复写的数为0,单独处理越界情况。

二. 复写操作

既然是逆序,那么就是要从后向前完成复写操作

注意:遇到0要多写一遍0

//从后向前复写while (dest >= 0) {if (arr[cur] == 0) {// 遇到0要记得复写两遍0arr[dest--] = 0;}arr[dest--] = arr[cur--];}

3. 代码实现

题目链接

class Solution {
public:void duplicateZeros(vector<int>& arr) {// 先找到最后一个要复写的数int dest = -1; // 复写位置int cur = 0;   // 遍历数组while (cur < arr.size()) {if (arr[cur] == 0) {dest += 2;} else {++dest;}if (dest >= arr.size() - 1) {break;}++cur;}// 从后往前复写// 还要单独处理边界情况--cur走到最后要复写的数为0,dest复写导致越界访问的情况if (dest == arr.size()) {arr[arr.size() - 1] = 0;--cur;dest -= 2;}while (dest >= 0) {if (arr[cur] == 0) {// 遇到0要记得复写两遍0arr[dest--] = 0;}arr[dest--] = arr[cur--];}}
};

提交记录:

制作不易,若有不足之处或出问题的地方,请各位大佬多多指教 ,感谢大家的阅读支持!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461976.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用linuxdeployqt打包Qt程序问题及解决方法

dpkg: 处理归档 libmysqlclient18_5.6.25-0ubuntu1_amd64.deb (--install)时出错&#xff1a; 预依赖问题 - 将不安装libmysqlclient18:amd64 在处理时有错误发生&#xff1a; libmysqlclient18_5.6.25-0ubuntu1_amd64.deb下载libmysqlclient18/5.6.25 libmysqlclient18/5.6…

配置BGP与IGP交互和路由自动聚合示例

组网需求 如图所示&#xff0c;用户将网络划分为AS65008和AS65009&#xff0c;在AS65009内&#xff0c;使用IGP协议来计算路由&#xff08;该例使用OSPF做为IGP协议&#xff09;。要求实现两个AS之间的互相通信。 配置思路 采用如下的思路配置BGP与IGP交互&#xff1a; 在AR…

基于SpringBoot的健身房系统的设计与实现(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

flex 布局比较容易犯的错误 出现边界超出的预想的情况

flex 布局比较容易犯的错误 出现边界超出的预想的情况 如图 当使用flex布局时&#xff0c;设置flex:1 或者是flex:x 时 如果没有多层嵌套的flex布局&#xff0c;内容超出flex&#xff1a;1规定的后&#xff0c;仍然会撑大融器 在flex:1 处设置 overflow:hidden 即可超出后不显…

vscode | 开发神器vscode快捷键删除和恢复

目录 快捷键不好使了删除快捷键恢复删除的快捷键 在vscode使用的过程中&#xff0c;随着我们自身需求的不断变化&#xff0c;安装的插件将会持续增长&#xff0c;那么随之而来的就会带来一个问题&#xff1a;插件的快捷键重复。快捷键重复导致的问题就是快捷键不好使了&#xf…

商家如何在高德地图上申请店铺入驻?

在当今数字化时代&#xff0c;互联网成为了消费者寻找商品和服务的主要渠道。高德地图作为国内领先的地图导航软件&#xff0c;不仅拥有庞大的用户基础&#xff0c;还为商家提供了优质的店铺展示平台。因此&#xff0c;对于实体店商家而言&#xff0c;入驻高德地图是提升店铺曝…

Cpp多态机制的深入理解(20)

文章目录 前言一、多态的概念二、多态的定义与实现两个必要条件虚函数虚函数的重写重写的三个例外override 和 final重载、重写(覆盖)、重定义(隐藏) 三、抽象类概念接口继承和实现继承 四、多态的原理虚表和虚表指针虚函数调用过程动态绑定与静态绑定 五、那...那单继承甚至多…

数字IC后端实现之Innovus Place跑完density爆涨案例分析

下图所示为咱们社区a7core后端训练营学员的floorplan。 数字IC后端实现 | Innovus各个阶段常用命令汇总 该学员跑placement前density是59.467%&#xff0c;但跑完place后density飙升到87.68%。 仔细查看place过程中的log就可以发现Density一路飙升&#xff01; 数字IC后端物…

大数据新视界 -- 大数据大厂之大数据环境下的网络安全态势感知

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令以及Vscode中的环境路径配置中找不到gcc

配置环境变量教程很多&#xff0c;就不多说&#xff0c;说下耗费一小时解决的问题&#xff1a;mingw64安装后配置完环境变量仍然执行不了gcc命令 配置 了N次了&#xff0c;都还是在终端找不到指令&#xff0c;然后&#xff0c;将路径放到第一个&#xff0c;然后再看下&#xf…

【AI日记】24.11.01 LangChain、openai api和github copilot

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 工作1 内容&#xff1a;学习deeplearning.ai的免费课程地址&#xff1a;LangChain Chat with Your DataB站地址&#xff1a;https://www.bilibili.com/video/BV148411D7d2时间&#xff1a;2小时评估&am…

位运算算法及习题 ,丢弃的数字 , 两整数之和 ,只出现一次的数字II

文章目录 位运算基础1.基础位运算2. 给一个数n,确定他的二进制位中的第x为是0还是13.将一个数n的二进制表示的第x位修改为14.将一个数n的二进制表示的第x位修改为05.位图的思想6. 提取一个数n二进制表示中最右侧的17. 去掉一个数n二进制表示中最右侧的18. 异或运算的运算律 丢弃…

使用form表单的action提交并接收后端返回的消息

使用form表单的action提交表单是同步提交的方式&#xff0c;会跳转页面&#xff0c;所以无法获取后端返回来到消息。这样描述或许没有太大感觉&#xff0c;如果我要通过表单的方式上传文件&#xff0c;并接收后台返回来的响应数据&#xff1b;这样说是不是就感同深受了呢。 1.…

曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》&#xff0c;杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行&#xff1a;科技驱动共享出行未来 曹操…

2024年10月文章一览

2024年10月编程人总共更新了21篇文章&#xff1a; 1.2024年9月文章一览 2.《Programming from the Ground Up》阅读笔记&#xff1a;p147-p180 3.《Programming from the Ground Up》阅读笔记&#xff1a;p181-p216 4.《Programming from the Ground Up》阅读笔记&#xff…

【果蔬识别】Python+卷积神经网络算法+深度学习+人工智能+机器学习+TensorFlow+计算机课设项目+算法模型

一、介绍 果蔬识别系统&#xff0c;本系统使用Python作为主要开发语言&#xff0c;通过收集了12种常见的水果和蔬菜&#xff08;‘土豆’, ‘圣女果’, ‘大白菜’, ‘大葱’, ‘梨’, ‘胡萝卜’, ‘芒果’, ‘苹果’, ‘西红柿’, ‘韭菜’, ‘香蕉’, ‘黄瓜’&#xff09;…

Partition架构

优质博文&#xff1a;IT-BLOG-CN Partition架构 【1】结构&#xff1a; Region至少3个Zone&#xff0c;Zone内至少两个Partition&#xff0c;Partition内至少1个K8S Member Cluster&#xff1b; 【2】故障域&#xff1a; 故障域及核心链路至少Zone内收敛&#xff0c;甚至Part…

xlrd.biffh.XLRDError: Excel xlsx file; not supported

文章目录 一、问题报错二、报错原因三、解决思路四、解决方法 一、问题报错 在处理Excel文件时&#xff0c;特别是当我们使用Python的xlrd库来读取.xlsx格式的文件&#xff0c;偶尔会遇到这样一个错误&#xff1a;“xlrd.biffh.XLRDError: Excel xlsx file; not supported”。…

Java XML一口气讲完!(p≧w≦q)

Java XML API Java XML教程 - Java XML API SAX API 下面是关键的SAX API的摘要: 类用法SAXParserFactory创建由系统属性javax.xml.parsers.SAXParserFactory确定的解析器的实例。SAXParserSAXParser接口定义了几个重载的parse()方法。SAXReaderSAXParser包装一个SAXReader…

CTF顶级工具与资源

《Web安全》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484238&idx1&snca66551c31e37b8d726f151265fc9211&chksmc0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene21#wechat_redirect 《网安面试指南》h…