每日一题:LeetCode-1089. 复写零

news2025/1/11 14:29:25

每日一题系列(day 09)

前言:

🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈

   🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉算法👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长的道路🏇🏇,我们要做的,就是斩妖除魔💥💥,打怪升级!💪💪当然切记不可😈走火入魔😈,每日打怪,拾取经验,终能成圣🙏🙏!开启我们今天的斩妖之旅吧!✈️✈️


题目:

  给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。
  注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西

示例:

在这里插入图片描述

提示:

  • 1 <= arr.length <= 104
  • 0 <= arr[i] <= 9

思路:

  如果自己尝试写的时候发现其实并不简单,虽然被力扣标为简单。题目说遇到0要复写,把0后面的元素全部向后移动一位,留下一个位置给复写的0,而且只能在本数组内操作,不能扩容。在上到题目中我们说了,这种类似的问题都是可以使用双指针来解决。如何使用双指针就成了问题。

  虽然这题是让我们在原数组操作,但是我们不妨先开辟一个数组,cur指针指向原数组,dest指针指向新数组,只要cur不为0,dest就复制cur的值,如果cur为0,dest就移动两步,且每一步都写为0。

在这里插入图片描述

  这个时候我们发现dest指针所在数组与测试用例的结果相同,说明我们的思路是正确的,但是题目要求我们是原地操作。

  首如果我们按照常规的思路,首先设置cur指针用来遍历数组,同时表示dest指针走几步,因为开始不知道dest走几步,所以将dest的值设置为-1。

在这里插入图片描述

  既然我们从左向右的双指针不得行,我们可以考虑从右向左来进行复写操作,但是我们要想保证复写的正确性,还需要知道正向复写最后一个复写的元素,这样才能从后向前复写。
  其实我们在最开始假设有新数组来复写的操作,我们可以看到最后一个复写的值为4,最后dest和cur又都多走了一步,我们仅需将条件控制为:

dest <= arr.size() - 1;

即可,这样cur就会指向最后一个需要复写的元素了,dest也正好指向最后一个元素。而对于原地操作,我们仅仅需要找到cur的位置和dest的位置就行,所以在找位置的情况我们不需要复写,就可以在同一个数组操作了。

在这里插入图片描述

  这个时候,我们的cur的位置就是最后需要复写的位置,而dest正是我们需要复写的最后一个元素。
  找到这个元素之后,我们就可进行从后往前的复写操作了,当arr[cur]不为0的时候,dest向前移动一位并且复写这个数,cur–。如果cur为0,dest就向前走两位,每位复写为0,cur–。即可

代码实现:

class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        int cur = 0;
        int dest = -1;
        while(cur < arr.size())
        {
            if(arr[cur]) 
            dest++;
            else
            dest += 2;
            if(dest >= arr.size() - 1) break;
            cur++;
        }
        while(dest > -1)
        {
            if(arr[cur]) arr[dest--] = arr[cur--];//cur不为0拷贝一次
            else 
            {
                arr[dest--] = 0;//cur为0复写两次
                arr[dest--] = 0;
                cur--;
            }
        }
    }
};

但是这个时候我们运行的时候却发现:

在这里插入图片描述
出现了这么的错误,我们可以看到他给我们的报错的测试用例:

在这里插入图片描述
  我们不妨画图看一下问题在哪?

在这里插入图片描述
  原来是我们的dest指针越界了,在我们复写的时候这种情况会在数组外边越界访问了,这种情况是造成的原因是最后一个复写元素为0的原因。
  如果不考虑越界的情况继续复写一步操作我们会发现:

在这里插入图片描述
  所以其实我们仅仅需要控制住边界条件,复写时将:

arr[arr.size() - 1] = 0;

即可。所以我们可以这样改:

代码实现:

class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        int cur = 0;
        int dest = -1;
        while(cur < arr.size())
        {
            if(arr[cur]) 
            dest++;
            else
            dest += 2;
            if(dest >= arr.size() - 1) break;
            cur++;
        }
        if(dest == arr.size())//加上边界判断即可
        {
            arr[arr.size() - 1] = 0;
            dest -= 2;
            cur--;
        }
        while(dest > -1)
        {
            if(arr[cur]) arr[dest--] = arr[cur--];
            else 
            {
                arr[dest--] = 0;
                arr[dest--] = 0;
                cur--;
            }
        }
    }
};

在这里插入图片描述


  这样我们就可以通过了,这题虽然被标记为简单,但是我感觉却一点也不简单(主要是太菜),需要注意的是双指针的灵活运用,以及边界情况的考量要到位。

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

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

相关文章

文心大模型3.5 VS ChatGPT3.5,谁更会写代码 ?

问题&#xff1a;请帮我写一段代码&#xff0c;SAP物料凭证创建接口的代码 &#xff1f; 文心大模型3.5&#xff1a;写了一段 python ChatGPT3.5 : 写的还可以啊&#xff0c;理解的很到位,而且用的是S/4新语法呀 &#xff01; DATA: lt_header TYPE TABLE OF bapi2017_gm_head_…

观《王牌对王牌:国宝回国》有感 —— AI绘画之古画修复对比图

一、前言 上周《王牌对王牌》节目的主题是《国宝回国》&#xff0c;而今天的AI绘画的灵感&#xff0c;就来源于这期节目。 下面这组图&#xff0c;左侧部分因时间的流逝而显现出褪色和损伤的痕迹&#xff0c;色彩变得暗淡&#xff0c;细节也因年代久远而变得模糊不清。 而右…

SA与NSA网络架构的区别

SA与NSA网络架构的区别 1. 三大运营商网络制式&#xff1a;2. 5G组网方式及业务特性3. NSA-3系列4. NSA—4系列5. NSA-7系列6. 5G SA网络架构7. 运营商策略 1. 三大运营商网络制式&#xff1a; 联通&#xff1a;3G(WCDMA)\4G(FDD-LTE/TD-LTE)\5G(SA/NSA)移动&#xff1a;2G(GS…

专注数据采集分析系统研发 做设备与MES系统中转站

数据采集是实现MES系统与设备对接的核心环节。通过采集设备产生的实时数据&#xff0c;将其传输给MES系统进行处理和分析。数据采集可以通过直接连接设备的传感器或者通过设备上安装的采集设备实现。采集的数据可以包括设备的运行状态、产量数据、测量数据、能耗数据等。通过数…

光伏电站卫星测绘的优缺点有哪些?

由于环境保护和能源安全的重要性日益凸显&#xff0c;光伏发电作为一种清洁、可再生、分布式的能源形式&#xff0c;已经成为全球能源领域的热门话题。 光伏电站&#xff0c;是指一种利用太阳光能、采用特殊材料诸如晶硅板、逆变器等电子元件组成的发电体系&#xff0c;与电网相…

管理Windows资产新方式:SSH协议

配置默认shell&#xff0c;需要管理员权限运行powershell执行下面命令&#xff1a; New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -F…

SpringBootWeb案例_03

Web后端开发_06 SpringBootWeb案例_03 登录认证 智能学习辅助系统登录时需要身份验证 1.登录功能 先实现简单的登录功能&#xff0c;在进一步优化。 1.1需求 若账户或密码不存在/密码不正确&#xff0c;则登录失败。 账户密码正确&#xff0c;则登录成功 1.2接口文档 …

Android Studio - 显示配置

1.修改 Code / Split / Design&#xff08;代码视图 & 效果视图&#xff09; 路径&#xff1a;Settings→Editor→Design Tools。 2.增加打开文件的数量及展示方式 路径&#xff1a;Settings→Editor→General→Editor Tabs。

BUUCTF [UTCTF2020]docx 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 下载附件&#xff0c;得到一个.docx文件。 解题思路&#xff1a; 1、打开文件&#xff0c;内容如下&#xff0c;没有flag。 使用010 Editor打开.docx文件&…

AdWords 广告字符的限制是多少?

谷歌已经发展到不仅仅是一个简单的网络搜索。谷歌已成为任何组织所希望的最好的广告网络之一&#xff0c;不断有全球观众来到它研究项目和便利设施、数据、新闻、解决方案等等。 手机的变化带来了数字广告形式的初步转变&#xff0c;随后学习算法的发展和接受也给Google AdWor…

Qt基础 QListWidget dragDrop拖拽操作

目录 1.重写 2.本身自带拖拽功能 关于QLisWidget的item拖拽操作,也可以某个控件拖拽思路 1.重写 重写相当于要重写这些事件函数 void mousePressEvent(QMouseEvent *event); //鼠标按下 void mouseMoveEvent(QMouseEvent *event); //鼠标移动 void dragEnterE…

消字笔的正确使用方法?这样做轻松消除图片杂物!

拍摄的照片或者网上保存的图片有时候会有一点小瑕疵&#xff0c;比如拍摄照片的背景有他人出镜、衣服上有污渍点&#xff0c;保存的网图有水印或其他不想留存的元素。那想要收获一张完美照片&#xff0c;就需要使用消除工具进行处理&#xff0c;有需求就会有产品&#xff0c;具…

数据结构-03-栈

1-栈的结构和特点 先进后出&#xff0c;后进先出 是栈的特点&#xff1b; 从图中&#xff0c;我们看到A入栈先放入底部&#xff0c;然后依次B和C&#xff1b;出栈的顺序依次是C-B-A&#xff1b;这种结构只能在一端操作。所以当某个数据集合只涉及在一端插入和删除数据&#xf…

面试问的最多的时候

1&#xff1a;kafuka消息队列不丢数据 2&#xff1a;MVC的流转 3&#xff1a;线程池 4&#xff1a;liunx 5&#xff1a;k8s 6&#xff1a;负载过高 7&#xff1a;索引 8&#xff1a;事务 9&#xff1a;监听 10&#xff1a;动态路由 11&#xff1a;业务模块 12&#x…

【1】基于多设计模式下的同步异步日志系统

1. 项目介绍 本项⽬主要实现⼀个⽇志系统&#xff0c; 其主要⽀持以下功能: • ⽀持多级别⽇志消息 • ⽀持同步⽇志和异步⽇志 • ⽀持可靠写⼊⽇志到控制台、⽂件以及滚动⽂件中 • ⽀持多线程程序并发写⽇志 • ⽀持扩展不同的⽇志落地⽬标地 2. 开发环境 • CentOS 7 • vs…

【python海洋专题四十九】500hpa位势高度异常场

【python海洋专题四十九】500hpa位势高度异常场 # -*- coding: utf-8 -*- # ---导入数据读取和处理的模块------- import astimport pandas as pd from netCDF4 import Dataset from pathlib import Path import xarray as xr from datetime import datetime import n…

Tomcat 漏洞修复

1、去掉请求响应中Server信息 修复方法&#xff1a; 在Tomcat的配置文件的Connector中增加 server" " &#xff0c;server 的值可以改成你任意想返回的值。

SQL Sever 基础知识 - 限制行数

SQL Sever 基础知识 - 三、限制行数 三、限制行数第1节 OFFSET FETCH - 限制查询返回的行数1.1 OFFSET 和 FETCH 子句1.2 SQL Server OFFSET 和 FETCH 示例 第2节 SELECT TOP - 限制查询结果集中返回的行数或行的百分比2.1 SELECT TOP 子句2.2 PERCENT2.3 WITH TIES2.4 SELECT …

小满CRM与金蝶云星空系统数据集成方案分享

在当今数字化时代&#xff0c;企业面临着海量的数据和系统之间的复杂互联需求。为了提升业务效率和数据管理能力&#xff0c;企业需要借助先进的数据集成平台来实现不同系统之间的无缝连接。本文将分享小满CRM与金蝶云星空系统数据集成方案&#xff0c;为企业提供一个高效、稳定…

“超越摩尔定律”,存内计算走在爆发的边缘

过去几十年来&#xff0c;在摩尔定律的推动下&#xff0c;处理器的性能有了显著提高。然而&#xff0c;传统的计算架构将数据的处理和存储分离开来&#xff0c;随着以数据为中心的计算&#xff08;如机器学习&#xff09;的发展&#xff0c;在这两个物理分离的单元之间传输数据…