【算法专题】双指针算法之 1089.复写零(力扣)

欢迎来到 CILMY23的博客

🏆本篇主题为:双指针算法之 1089.复写零(力扣)

🏆个人主页:CILMY23-CSDN博客

🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题 | 代码训练营

🏆感谢观看,支持的可以给个一键三连,点赞关注+收藏。


✨写在前头: 

1089. 复写零 - 力扣(LeetCode)


题目

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

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

一、题目解析

 通过题目我们可知:

  1. 整数数组 arr 是长度固定的
  2. 该数组中出现的每个零都复写一遍,并将其余的元素向右平移。
  3. 不要在超过该数组长度的位置写入元素
  4. 就地修改
  5. 不返回任何东西

二、算法原理

 暴力解法

 我的想法是这样的,假设有个i指向数组的左边,假设有个j指向数组的右边。

我先每次都让i往右走,直到i找到0

然后我开始从j位置,每次都让前面的位置向后移动。 

 

直到 j == i的时候,让这个位置的数,添加0,就算复写0了。

然后这个时候i就不可以++了,而是加2.

然后j再从右边开始。 

双指针算法 

其实我的想法好像相差无几,这是一个从后向前的同向双指针 

 第一步:找到最后一个“复写”的数

定义两个指针,一个是cur 指向数组最左边,一个是dest 指向-1,当 cur 所指向的位置不为0时,dest前进1,当cur 指向0时候,这时候dest就要前进2步。 

遍历完后: 

特殊情况:

dest可能越界:

 如何处理?

也就是在越界的地方我们并不修改,对n-1的地方进行修改为0,然后cur前进一步,dest 前进两步。

第二步:

然后进行复写操作 即可,当cur指向不为0的时候,dest拷贝一个,cur指向0的时候,拷贝一个0.

三、代码编写

暴力解法:

class Solution {
public:void duplicateZeros(vector<int>& arr) {int n = arr.size() - 1;int i = 0;int j = n;while(i <= n){if(arr[i]!=0) //找0{i++;}else{j = n; //每次j都要从右边开始while(i < j){arr[j] = arr[j -1];j--;}arr[i] = 0;i += 2;}}}
};

 双指针算法:

class Solution {
public:void duplicateZeros(vector<int>& arr) {// 1. 找到最后一个复写的数int cur = 0;int dest = -1;int n = arr.size();while(cur<n){if(arr[cur] != 0 ){dest++;}else{dest+=2;}if(dest >= n-1){break;}cur++;}//1.5//处理边界情况if(dest == n){arr[n-1] = 0;cur--;dest -= 2;}//2.完成复写while(cur>=0){if(arr[cur] != 0 ){arr[dest] = arr[cur];dest--;cur--;}else{arr[dest--] = 0;arr[dest--] = 0;cur--;}}}
};

🛎️感谢各位同伴的支持,本期C++就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,关注+收藏,若有不足,欢迎各位在评论区讨论。    

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

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

相关文章

2024版彩虹晴天全能知识付费源码+虚拟商城解决方案 含一键搭建视频教程 无授权限制

是一款知识付费平台的核心&#xff0c;更是集虚拟商城、实物交易、代理分销于一体的全能解决方案。 核心亮点&#xff1a; 最新源码&#xff0c;独家首发&#xff1a;经过精心修复与更新&#xff0c;本源码由我们团队亲自把关&#xff0c;确保您获得的是市场上最新鲜、最稳定…

DBA 数据库管理 表管理 数据批量处理。表头约束

表管理 建库 库名命名规则&#xff1a;仅可以使用数字、字母、下划线、不能纯数字 不可使用MySQL命令或特殊字符 库名区分字母大小写 加if not exists 命令避免重名报错 create database if not exists gamedb; 建表 drop database if exists gamedb ; 删表…

【论文阅读】LLM4GCL: CAN LARGE LANGUAGE MODEL EMPOWER GRAPH CONTRASTIVE LEARNING?

LLM4GCL: CAN LARGE LANGUAGE MODEL EMPOWER GRAPH CONTRASTIVE LEARNING? https://openreview.net/forum?idwxClzZdjqP 图对比学习的重点就是图数据的增强&#xff0c;针对图中节点的表示或者图的结构进行扰动&#xff0c;通过对比学习得到对应的节点表示&#xff0c;以便于…

Kafka基础入门-代码实操

Kafka是基于发布/订阅模式的消息队列&#xff0c;消息的生产和消费都需要指定主题&#xff0c;因此&#xff0c;我们想要实现消息的传递&#xff0c;第一步必选是创建一个主题&#xff08;Topic&#xff09;。下面我们看下在命令行和代码中都是如何创建主题和实现消息的传递的。…

【Linux 配置静态IP】Ubuntu20.04

最近学习网络编程&#xff0c;为了方便学习需要Ubuntu配置静态IP&#xff0c;网上看了好多贴子跟着试了下可以实现&#xff0c;但重启虚拟机后有时就无法连接&#xff0c;总之各种各样问题&#xff1b;相关的配置方法也比较凌乱&#xff0c;有用netplan 或者 ifupdown ,笔者简单…

C++知识点:C和C++(自用)

C和C 1.类和结构体的关系&#xff1a;2.面向对象和面向过程3.头文件和标准命名空间4.cin和cout5. const在C中和C中的区别6.const全局作用域7 new和delete8 内联函数9 函数重载10. 函数重载的匹配 引用&#xff1a; [1]C语言中文网 1.类和结构体的关系&#xff1a; 类是结构体的…

Qt文件下载工具

在Qt中实现文件下载功能&#xff0c;通常可以通过多种方式来完成&#xff0c;包括使用 QNetworkAccessManager 和 QNetworkReply 类&#xff0c;或者使用更高级别的 QHttpMultiPart 类。以下是两种常见的实现方法&#xff1a; 方法1&#xff1a;使用 QNetworkAccessManager 和…

pxe高效网络批量装机

文章目录 一&#xff0c; PXE远程安装服务&#xff08;一&#xff09;三种系统装机的方式&#xff08;二&#xff09;linux装机1. 加载 Boot Loader2. 加载启动安装菜单3. 加载内核和 initrd4. 加载根文件系统5. 运行 Anaconda 安装向导 &#xff08;三&#xff09;实现过程&am…

语言主要是一种交流工具,而不是思维工具?GPT5何去何从?

引言 在人工智能领域&#xff0c;特别是大语言模型&#xff08;LLM&#xff09;的发展中&#xff0c;语言和思维的关系一直是一个备受关注的话题。近期&#xff0c;麻省理工学院&#xff08;MIT&#xff09;在《Nature》杂志上发表了一篇题为《Language is primarily a tool f…

linux进程——概念理解与PCB

前言&#xff1a;本篇讲解Linux进程概念相关内容。 操作系统被称为计算机世界的哲学&#xff0c; 可以见得操作系统的知识并不好理解。 对于这篇进程概念的讲解&#xff0c; 博主认为&#xff0c; 如果没有一些前置知识的话&#xff0c;里面的有些概念并不好理解。 但是如果学习…

SQL Server 用户应当如何防范 Mallox (.hmallox) 勒索软件袭击

勒索软件领域的特点是随着时间的流逝&#xff0c;参与者群体和恶意软件家族都会大量流失&#xff0c;只有少数参与者表现出相对长寿的寿命。曾经令人担忧的威胁&#xff0c;如 REvil 和 Conti&#xff0c;要么被铲除&#xff0c;要么被解散&#xff0c;而其他威胁——例如 ALPH…

UGUI优化篇(更新中)

UGUI优化篇 1. 基础概念2. 重要的类1. MaskableGraphic类继承了IMaskable类2. 两种遮罩的实现区别RectMask2DMask 3. 渲染部分知识深度测试深度测试的工作原理 渲染队列透明物体在渲染时怎么处理为什么透明效果会造成性能问题 1. 基础概念 所有UI都由网格绘制的如image由两个三…

25届平安产险校招测评IQ新16PF攻略:全面解析与应试策略

尊敬的读者&#xff0c;您好。随着平安产险校招季的到来&#xff0c;许多应届毕业生正积极准备着各项测评。本文旨在提供一份详尽的测评攻略&#xff0c;帮助您更好地理解平安产险的校招测评流程&#xff0c;以及如何有效应对。 25届平安产险平安IQ&#xff08;新&#xff09;测…

AI大模型探索之旅:深潜大语言模型的训练秘境

在人工智能的浩瀚星空中&#xff0c;大语言模型无疑是最耀眼的星辰之一&#xff0c;它们以无与伦比的语言理解与生成能力&#xff0c;引领着智能交互的新纪元。本文将带您踏上一场探索之旅&#xff0c;深入大语言模型的训练秘境&#xff0c;揭开其背后复杂而精妙的全景画卷。 …

给 「大模型初学者」 的 LLaMA 3 核心技术剖析

编者按&#xff1a; 本文旨在带领读者深入了解 LLaMA 3 的核心技术 —— 使用 RMSNorm 进行预归一化、SwiGLU 激活函数、旋转编码&#xff08;RoPE&#xff09;和字节对编码&#xff08;BPE&#xff09;算法。RMSNorm 技术让模型能够识别文本中的重点&#xff0c;SwiGLU 激活函…

现在有哪些微服务解决方案?

Dubbo&#xff1a;是一个轻量级的Java微服务框架&#xff0c;最初由阿里巴巴在2011年开源。它提供了服务注册与发现、负载均衡、容错、分布式调用等。Dubbo更多的被认为是一种高性能的RPC框架&#xff08;远程过程调用&#xff09;&#xff0c;一些服务治理功能依赖第三方组件完…

第一部分:C++入门

目录 前言 1、C关键字(C98) 2、命名空间 2.1、命名空间定义 2.2、命名空间的使用 3、C输入&输出 4、缺省参数 4.1、缺省参数的概念 4.2、缺省参数的分类 5、函数重载 5.1、函数重载的概念 5.2、C支持函数重载的原理 6、引用 6.1、引用的概念 6.2、引用特性 …

深圳晶彩智能JC3636W518C开箱实现电脑副屏功能

深圳晶彩智能发布了JC3636W518C 这是一款中国制造的&#xff0c;铝合金外壳&#xff0c;价格非常震撼的开发板。原创是billbill的up播主萨纳兰的黄昏设计的ESP32太极小派&#xff0c;由深圳晶彩智能批量生产。 该款 LCD 模块采用 ESP32-S3R8 芯片作为主控,该主控是双核 MCU&…

C++入门基础篇(2)

欢迎大家的来到小鸥的博客&#xff0c;今天我们继续C基础的第二篇吧&#xff01; 这也是入门基础篇的最后一篇wo~ 目录 1.引用 引用的概念 引用的特性及使用 const常引用 指针和引用的关系 2.inline内联函数 定义 相关特性及使用​ 3.nullptr >>后记<< …

摩尔投票算法

文章目录 什么是摩尔投票算法算法思想 相关例题摩尔投票法的扩展题目解题思路代码奉上 什么是摩尔投票算法 摩尔投票法&#xff08;Boyer-Moore Majority Vote Algorithm&#xff09;是一种时间复杂度 为O(n),空间复杂度为O(1)的方法&#xff0c;它多数被用来寻找众数&#xf…