Leetcode 1089.复写零

目录

题目

思路

代码


题目

给你一个长度固定的整数数组 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]

思路

题目依然是对数组元素原地进行修改,所以可以采用双指针的思路来解题,一个负责遍历一个负责更改,所以可以设立两个指针,cur和dest,cur负责遍历数组,dest负责更改数据,如果非零,dest就复写一遍,如果是0,dest就往后写入两个0。

可通过观察发现,如果从前往后进行遍历更改,就会导致数据被覆盖。从而破坏了数组的完整性。

因为在对数组进行修改时,多余的元素会从数组的队尾出,所以可以从后往前去更改数组。

所以我们可以先去找到最后一个需要复写的数,这样就可以确定数组的最后一个元素的值,从而可

以更好的控制写入时不发生溢出。

如上所示,当dest走到头时此时cur的位置就是最后一个需要复写的数。

但当以下情况出现时,dest会出现越界的情况,如果直接去访问就会导致越界问题。

所以当碰到越界以后需要进行一个特殊处理,当dest==n时说明越界了,也说明最后一个复写的元素绝对是0才会导致dest越界,所以直接把下标为n-1也就是数组最后一个元素的值修改为0然后让dest-=2,同时让cur往前移动一位。此时第一步就完成了。接下来就可以修改数组数据了。

先判断cur对应的元素是否为0,如果不为0 dest修改该位置元素然后向前移动一位,如果为0 将该位置元素改为0然后向前把前一个位置元素也改为0。

代码

class Solution {
public:void duplicateZeros(vector<int>& arr) {int cur=0,dest=-1,n=arr.size();while(cur<n)//找最后一个需要复写的下标{if(arr[cur]) ++dest;else dest+=2;if(dest>=n-1) break;cur++;}if(dest==n){dest-=2;--cur;arr[n-1]=0;}while(cur>=0){if(arr[cur])arr[dest--]=arr[cur];else {arr[dest--]=0;arr[dest--]=0;}cur--;}}
};

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

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

相关文章

ETL、ELT区别以及如何正确运用

一、 浅谈ETL、ELT ETL与ELT的概念 ETL (Extract, Transform, Load) 是一种数据集成过程&#xff0c;通常用于将数据从一个或多个源系统抽取出来&#xff0c;经过清洗、转换等处理后&#xff0c;加载到目标数据存储中。这种方法适用于需要对数据进行加工和整合后再加载到目标…

指定截至频率的低通滤波器设计

模拟滤波器 一阶 H ( s ) 1 a ⋅ s 1 H(s) \frac{1}{a \cdot s 1} H(s)a⋅s11​ 其中 a 1 ω c a \frac{1}{\omega_c} aωc​1​&#xff0c; ω c \omega_c ωc​ 是截至频率&#xff08;-3dB处的频率&#xff09;。该滤波器的相位范围为 (0, - π 2 \frac{\pi}{2} 2π…

MySQL 锁的内存结构

目录 1.摘要 2. 加锁的本质 3. 锁结构详解 3.1 锁所在的事务信息 3.2 索引信息 3.3 表锁/行锁信息 3.4 type_mode 3.5 其他信息 3.6 一堆比特位 1.摘要 在 MySQL 中&#xff0c;有很多种锁&#xff0c;例如行锁&#xff0c;表锁&#xff0c;页锁&#xff0c;全局锁&a…

MyBatis Plus:自定义typeHandler类型处理器

目录 引言&#xff1a;关于TypeHandler PostGreSQL&#xff1a;JSON数据类型 PostGreSQL数据库驱动&#xff1a;PGobject类 TypeHandler类型处理器 自定义类型处理器 类型处理器实现&#xff1a;PGJsonTypeHandler 注册类型处理器 引言&#xff1a;关于TypeHandler MyBa…

Sui在Dacade推出Move课程,完成学习奖励SUI

Dacade推出了一门Sui开发者课程&#xff0c;通过一系列引人入胜的挑战&#xff0c;为开发者提供了一个沉浸式的Move技术之旅。在这门课程中&#xff0c;Dacade的教育材料将引导用户利用Sui强大的DeFi原生功能&#xff08;包括DeepBook和zkLogin&#xff09;构建DeFi应用。此外&…

提升VR全景摄影画质的8个因素

如今VR全景拍摄的门槛已经很低&#xff0c;包括无人机、全景相机等都具有一键全景的功能。很多初次接触VR全景拍摄的朋友会发现同样的设备&#xff0c;为啥拍出来的效果就不如别人呢&#xff1f; 其实&#xff0c;要提升VR全景拍摄质量&#xff0c;只需要了解以下几个环节&…

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023 摘要关键词 1 资料和方法1. 1 研究区域与观测数据1. 2 机器学习模型构建与验证方法1. 3 SHAP 可解释性方法 2 主要结果2. 1 不同模型的模拟性能和泛化能力2. 2 不同模型的可解释性分析2. 3 5 km 分辨率格点蒸散发…

Newtonsoft.Json设置忽略某些字段

using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace TestProject1 {/// <summary>/// 输出json时&#xff0c;设置忽略哪些…

【Flink状态管理(六)】Checkpoint的触发方式(1)通过CheckpointCoordinator触发算子的Checkpoint操作

文章目录 一. 启动CheckpointCoordinator二. 开启CheckpointScheduler线程三. 触发Checkpoint1. Checkpoint执行前的工作2. 创建PendingCheckpoint3. Checkpoint的触发与执行 四. Task节点的Checkpoint操作1. 触发准备2. 调用TaskExecutor执行Checkpoint操作 五. 在StreamTask中…

鸿蒙Next怎么升级,有便捷的方法?

早在2023年11月&#xff0c;市场上有自媒体博主表示&#xff0c;华为HarmonyOS NEXT的升级计划是2X年底到2X年初完成一亿部&#xff0c;2X年底完成三亿部。虽然该博主没有明确具体年份&#xff0c;但预计是2024年底2025年初升级一亿部HarmonyOS NEXT设备&#xff0c;2025年底完…

上门服务小程序系统|多元化服务和高效便捷的服务体验

现代社会的快节奏生活让人们越来越追求便捷与效率&#xff0c;而上门服务系统应运而生&#xff0c;成为了现代人生活中的新选择。通过在家就能享受各种服务&#xff0c;不仅省时省力&#xff0c;还能提供个性化的服务体验。 上门服务系统的出现&#xff0c;使得各类家政、维修…

盲盒小程序开发,线上盲盒平台的发展潜力

盲盒的出现给大众带来了全新的消费体验&#xff0c;目前&#xff0c;盲盒经济也是席卷了当代年轻人&#xff0c;一种新的商业模式就此出现。盲盒的玩法、种类也在不断创新进化&#xff0c;成为了吸引大众的消费形式。 当然&#xff0c;在当下盲盒稳步发展时期&#xff0c;也要…

Collection集合体系(ArrayList,LinekdList,HashSet,LinkedHashSet,TreeSet,Collections)

目录 一.Collection 二.List集合 三.ArrayList集合 四.LinkedList集合 五.Set集合 六.hashSet集合 七.LinkedHashSet集合 八.TreeSet集合 九.集合工具类Collections 集合体系概述 单列集合&#xff1a;Collection代表单列集合&#xff0c;每个元素&#…

【云安全】Hypervisor与虚拟机

Hypervisor 也被称为虚拟机监视器&#xff08;Virtual Machine Monitor&#xff0c;VMM&#xff09;&#xff0c;主要作用是让多个操作系统可以在同一台物理机上运行。 Type-1 Hypervisor 与 Typer-2 Hypervisor Type-1 Hypervisor 直接安装在物理服务器上&#xff0c;不依赖…

onlyoffice基础环境搭建+部署+demo可直接运行 最简单的入门

office这个体系分为四个大教程 1、【document server文档服务器基础搭建】 2、【连接器(connector)或者jsApi调用操作office】-进阶 3、【document builder文档构造器使用】-进阶 4、【Conversion API(文档转化服务)】-进阶 如果需要连接器&#xff0c;可以查看&#xff1a;onl…

R语言【base】——nrow(),ncol(),NCOL(),NROW():返回数组的行数/列数

Package base version 4.2.0 Description nrow和nrow返回x中存在的行数或列数。ncol和nrow将向量处理为1列矩阵&#xff0c;甚至是0列长度的向量&#xff0c;与as.matrix()或cbind()兼容&#xff0c;参见示例。 Usage nrow(x) ncol(x) NCOL(x) NROW(x) Arguments 参数【x】&…

IO进程线程day4

1.思维导图 2.使用多进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半&#xff0c;子进程拷贝后一半&#xff0c;父进程回收子进程的资源。 #include<myhead.h>int main(int argc, const char *argv[]) {//判断终端输入的参数是否合法if(argc!3){printf("input…

计算机网络Day1--计算机网络体系

1.三网合一 电信网络、广播电视网络、计算机网络&#xff08;最基础最重要发展最快&#xff09; 2.Internet 名为国际互联网、因特网&#xff0c;指当前全球最大的、开放的、由众多网络相互连接而成的特定互连网&#xff0c;采用TCP/IP 协议族作为通信的规则&#xff0c;前…

stm32——hal库学习笔记(定时器)

这里写目录标题 一、定时器概述&#xff08;了解&#xff09;1.1&#xff0c;软件定时原理1.2&#xff0c;定时器定时原理1.3&#xff0c;STM32定时器分类1.4&#xff0c;STM32定时器特性表1.5&#xff0c;STM32基本、通用、高级定时器的功能整体区别 二、基本定时器&#xff0…

【C++】1143 - 纯粹合数

问题 一个合数&#xff0c;去掉最低位&#xff0c;剩下的数仍是合数&#xff0c;再去掉剩下的数的最低位&#xff0c;余留下来的数还是合数&#xff0c;这样反复&#xff0c;一直到最后剩下的一位数仍是合数&#xff1b;我们把这样的数称为纯粹合数。求所有的三位纯粹合数。 1…