Leetcode 1089.复写零

news2024/10/6 20:36:01

目录

题目

思路

代码


题目

给你一个长度固定的整数数组 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.coloradmin.cn/o/1460341.html

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

相关文章

录屏后没有声音怎么补救?试试这几种录屏工具

录屏后没有声音怎么补救&#xff1f;在数字化时代&#xff0c;无论是为了制作教学视频、分享游戏过程&#xff0c;还是为了记录会议内容&#xff0c;录屏都扮演着重要的角色。然而&#xff0c;在进行录屏时&#xff0c;有时可能会遇到录屏后没有声音的问题&#xff0c;这无疑会…

MIT 6.S081---Lab: Copy-on-Write Fork for xv6

Implement copy-on write(hard) 从下图可见&#xff0c;xv6的pte中RSW都是可以被软件使用的未定义位&#xff0c;此处将pte中的第9位标记为PTE_COW位。 修改kernel/riscv.h&#xff1a; 修改kernel/vm.c&#xff0c;新增refCount代表物理页面的引用次数&#xff0c;根据&…

2024年2月的TIOBE指数,go语言排名第8,JAVA趋势下降

二月头条&#xff1a;go语言进入前十 本月&#xff0c;go在TIOBE指数前10名中排名第8。这是go有史以来的最高位置。当谷歌于2009年11月推出Go时&#xff0c;它一炮而红。在那些日子里&#xff0c;谷歌所做的一切都是神奇的。在Go出现的几年前&#xff0c;谷歌发布了GMail、谷歌…

探索水下低光照图像检测性能,基于DETR(DEtection TRansformer)模型开发构建海底生物检测识别分析系统

海底这类特殊数据场景下的检测模型开发相对来说比较少&#xff0c;在前面的博文中也有一些涉及&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《尝试探索水下目标检测&#xff0c;基于yolov5轻量级系列模型n/s/m开发构建海底生物检测系统》 《基于YOLOv5C3CBAMCBA…

list链表

1. list基本概念 功能&#xff1a;将数据进行链式存储 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成&#xff1a;链表由一系列结点组成 结点的组成&#xff1a;一个是存储数据…

苍穹外卖——第一天nginx

放到全是英文路径的打不开 到安装路径进入cmd&#xff0c;输入nginx -t nginx: the configuration file E:\Astudy\nginx-1.20.2/conf/nginx.conf syntax is ok nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbid…

C++ For循环:生成三角形*阵列图案

#include <iomanip> #include <iostream>using namespace std;int main() {int i,j,n;cout << "请输入图案的行数&#xff1a;";cin >> n;for (i 1; i < n; i){cout << setw(n-i1); //设置域宽for (j 1; j < i; j){cout <…

外汇天眼:台积电离职员工开设资金盘,4年诈骗4000人得手65亿

继去年5月爆出的im. B借贷诈骗案件后&#xff0c;近期警方又破获一个做案手法如出一辙的资金盘&#xff0c;值得注意的是&#xff0c;由于主嫌利用曾在台积电工作结识的人脉&#xff0c;因此有大量台积电员工及其亲友受害&#xff0c;甚至让公司高层决定请法务部门协助打官司。…

CentOS和Ubuntu之间的区别和联系

CentOS&#xff08;Community ENTerprise Operating System&#xff09;和Ubuntu是两种流行的Linux发行版&#xff0c;它们在企业和个人用户中都有广泛的应用。尽管它们都是基于Linux内核&#xff0c;但它们在设计理念、更新策略、包管理系统等方面存在一些关键的区别和联系。下…

hashtable的结构和扩容机制

结构 最外层封装了dictht&#xff0c;结构如下 table指向了实际存储的hash结构dictEntry。size是哈希表大小&#xff0c;也就是说dictEntry有多少空间。sizemask是掩码&#xff0c;为固定值size-1&#xff0c;然后元素的index就应该是元素哈希值&sizemask。used代表dictE…

项目经理想辞职的20个“离奇”理由

项目经理&#xff0c;这个看似风光无限的职位&#xff0c;其实背后也有许多鲜为人知的辛酸。以下是几个项目经理想辞职的“离奇”理由&#xff1a; 1、“与难缠客户斗智斗勇” 有些客户的要求比“外星人的要求”还要离奇。 2、“被‘无限需求’吞噬” 客户总是有无尽的需求…

【云原生系列之kubernetes】--Ingress使用

service的缺点&#xff1a; 不支持基于URL等机制对HTTP/HTTPS协议进行高级路由、超时、重试、基于流量的灰度等高级流量治理机制难以将多个service流量统一管理 1.1ingress的概念 ingress是k8s中的一个对象&#xff0c;作用是如何将请求转发到service的规则ingress controlle…

协和眼科牵头 ,5 家眼科中心同发力,用 AI 助力 13 种眼底疾病检测

眼睛方寸之间&#xff0c;疾病千差万别。去年底&#xff0c;由爱康集团与鹰瞳 Airdoc 联合发布的《四百万体检人群健康蓝皮书》显示&#xff0c;近年来眼底异常的总检出率连年上升&#xff0c;已从 2019-2020 年的 76.1%&#xff0c;上升至 2022-2023 年的 78.7%。眼底疾病的发…

网络基础与通信原理:构建数字世界的框架

目录 初识计算机网络 网络介绍 按照拓扑分类 按地域分类 网络设备 交换机&#xff08;switch&#xff09; 路由器&#xff08;router&#xff09; 传输介质 双绞线 光纤 光纤速度 ISO ISO和OSI有什么关系呢&#xff1f; OSI七层模型 TCP/IP四层 TCP/IP协议族 …

【RN】为项目使用React Navigation中的navigator

简言 移动应用基本不会只由一个页面组成。管理多个页面的呈现、跳转的组件就是我们通常所说的导航器&#xff08;navigator&#xff09;。 React Navigation 提供了简单易用的跨平台导航方案&#xff0c;在 iOS 和 Android 上都可以进行翻页式、tab 选项卡式和抽屉式的导航布局…

Android轻量级进程间通信Messenger源码分析

一. 概述 Android中比较有代表性的两大通信机制&#xff1a;1. 线程间Handler通信 2. 进程间Binder通信&#xff0c;本篇文章中我们在理解AIDL原理的基础上来解读一下Messenger的源代码&#xff0c; 并结合示例Demo加深理解。 在看本篇文章前&#xff0c;建议先查阅一下笔者的…

51_蓝桥杯_独立按键

一 电路 注意&#xff1a;J5跳帽接到2~3引脚&#xff0c;使按键S4-S5四个按键的另外一端接地&#xff0c;从而成为4个独立按键。 二 独立按键工作原理 三 代码 代码1&#xff1a;按下S7点亮L1指示灯&#xff0c;松开按键&#xff0c;指示灯熄灭&#xff0c;按下S6点亮L2指示灯…

Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密

一、前言 之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置&#xff08;读取时自动解密&#xff09;&#xff0c;对Spring Boot项目的属性读取时进行加解密&#xff0c;但是没有说明对System.setProperty(key, value)设…

养生系列文章目录 - 心学和冥想融合实践

养生系列文章目录 文章目录 养生系列文章目录前言一、冥想方式二、早起床上冥想三、喝水冥想四、走路冥想四、坐地铁冥想五、写字冥想六、沟通冥想七、学习冥想八、听音乐冥想九、工作冥想十、跑步冥想十一、睡前冥想总结 前言 王阳明&#xff08;1472-1529&#xff09;是中国明…

善于利用GPT确实可以解决许多难题

当我设计一个导出Word文档的功能时&#xff0c;我面临了一个挑战。在技术选型时&#xff0c;我选择了poi-tl这个模板引擎&#xff0c;因为在网上看到了很多关于它的推荐。poi-tl可以根据模板快速导出Word文档。虽然之前没有做过类似的功能&#xff0c;而且项目中也没有用过&…