(C++)复写零--双指针法

个人主页:Lei宝啊 

愿所有美好如期而遇


力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/duplicate-zeros/

算法原理

双指针法,不一定是说就要使用指针,只是一种形象的说法,在数组中,我们一般将数组下标当做指针,这道题目我们仍然定义cur以及dest,当我们将cur和dest都定义在数组开始时,按照逻辑执行下去,那么遇到0时,后面的部分值会被覆盖,所以我们不能从左向右走,而是从右向左走,但是这样的话我们又怎么知道cur和dest的位置呢?我们看图示

图示

正常从左向右走,图示:

2就被覆盖了,但是我们先走下去(不考虑覆盖),看看cur和dest的最终位置:

当dest到达右边界时停止。

也就是说,我们可以先遍历找到指针位置,再倒过来复写,图示:

 

我们还有一种特殊情况,就是dest越过边界,到了size,那么我们就要先将数组下标为size-1的位置置0,因为size位置不能置0,是越界的,然后我们dest -= 2,cur--,接下来正常走就好。

代码

class Solution {
public:void duplicateZeros(vector<int>& arr) {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++;}if(dest > n - 1){arr[n - 1] = 0;dest -= 2;cur--;}while(cur >= 0){        if(arr[cur] != 0){arr[dest--] = arr[cur--];}else{arr[dest--] = 0;arr[dest--] = 0;cur--;}             }     }
};

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

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

相关文章

【500强 Kubernetes 课程】第4章 dockerfile基础篇-基本语法

【读书笔记-首页】基于世界500强的高薪实战Kubernetes课程 第4章 dockerfile基础篇-基本语法 dockerfile&#xff1a;构建镜像的文本文件 1、FROM 作用&#xff1a;基础镜像来源 2、MAINTAINER 作用&#xff1a;作者信息 3、RUN 作用&#xff1a;构建过程中运行的命令 …

Firewalld端口富规则——删除默认开放的服务

在Redhat8.6中&#xff0c;firewalld默认开放了ssh、cockpit、dhcpv6-client三个服务的端口富规则。如果想把默认开放的服务关掉可以执行下面的命令&#xff1a; firewall-cmd --permanent --remove-servicessh firewall-cmd --permanent --remove-servicecockpit firewall-cmd…

ESP32-Web-Server 实战编程- 使用 AJAX 自动更新网页内容

ESP32-Web-Server 实战编程- 使用 AJAX 自动更新网页内容 概述 什么是 AJAX &#xff1f; AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 是一种用于创建快速动态网页的技术。 传统的网页&#xff08;不使用 AJAX&#…

PHP如何实现邮箱验证

在PHP中&#xff0c;提供了 mail() 函数用于发送邮件。使用该函数需要设置邮件头信息、收件人地址、邮件主题和邮件内容等参数。下面是一个简单的使用示例&#xff1a; $to 收件邮箱; $subject 邮件主题; $message 邮件内容; $from 发件邮箱; $headers "From: $from…

Linux 进程(一)

1 操作系统 概念&#xff1a;任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括 内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09; 其他程序&#xff08;例…

linux安装docker(脚本一键安装配置docker)

1、创建脚本 vi initDocker.sh #安装前先更新yum&#xff0c;防止连接镜像失败 yum -y update#卸载系统之前的docker&#xff08;可选择&#xff0c;我这里直接注释了&#xff09; #yum remove docker docker-client docker-client-latest docker-common docker-latest docke…

Go 谈论了解Go语言

一、引言 Go的历史回顾 Go语言&#xff08;通常被称为Go或Golang&#xff09;由Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计&#xff0c;并于2009年正式公开发布。这三位设计者都曾在贝尔实验室工作&#xff0c;拥有丰富的编程语言和操作系统研究经验。Go的诞生…

android开发:子线程更新UI界面

多线程操作经常希望在子线程更新界面&#xff0c;这样方便调试&#xff0c;但是&#xff0c;但是经常这样做程序就不对劲了&#xff0c;为什么呢&#xff1f;因为为了保证界面流畅&#xff0c;不允许在非UI线程直接操作界面&#xff0c;只能通过一些专门途径进行。另外&#xf…

Wordpress自动定时发布怎么开通-Wordpress怎么自动发布原创文章

在当今数字化时代&#xff0c;博客已经成为许多人分享观点、经验和知识的重要平台。然而&#xff0c;对于博主们来说&#xff0c;每天按时发布一篇又一篇的文章可能是一项具有挑战性的任务。为了解决这个问题&#xff0c;一些创新的工具应运而生&#xff0c;其中包括WordPress的…

vuepress-----4、侧边栏

# 4、侧边栏 # 自动生成侧栏 如果你希望自动生成一个仅仅包含了当前页面标题&#xff08;headers&#xff09;链接的侧边栏&#xff0c;你可以通过 YAML front matter 来实现&#xff1a; --- sidebar: auto ---你也可以通过配置来在所有页面中启用它&#xff1a; // .vuep…

深入探索 Vue 响应式原理:数据驱动视图的奥秘

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Docker快速创建一个单机版的Jenkins实例

谈到 CI/CD&#xff0c;那便少不了这里面的佼佼者 Jenkins&#xff0c;正如 Jenkins 官网说的一样&#xff1a;“Build great things at any scale”&#xff0c;构建伟大&#xff0c;无所不能&#xff01; 话不多说&#xff0c;该篇文章将会带你使用 Docker 快速创建一个单机…

COGVLM论文解读(COGVLM:VISUAL EXPERT FOR LARGE LANGUAGE MODELS)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、摘要二、引言三、模型方法1、模型思路2、融合公式 四、训练方法总结 前言 2023年5月18日清华&智谱AI发布并开源VisualGLM-6B以来&#xff0c;清华KEG&…

C++多线程-传递普通变量,指针,引用给线程

注意点&#xff1a; 1、传递空间已销毁 2、多线程共享一块内存 3、传递的指针变量的生命周期小于线程 #include <iostream> #include <thread> #include <string> #include <unistd.h>using namespace std;class Para {public:Para(){cout<<…

Linux搭建FTP并安装xrdp,实现Windows系统下利用FileZilla传输文件和远程桌面连接

一、实现FTP文件传输 1、搭建FTP服务器&#xff1a; sudo apt-get install vsftpd sudo service vsftpd status 2、查看vsftpd是否正在运行&#xff0c;并监听21端口 netstat -npl | grep :21 or sudo service vsftpd status # 查看 vsftpd 服务状态 3、配置vsftpd.conf sud…

4.6-容器的端口映射

首先&#xff0c;我们来拉取Nginx的image镜像。 docker pull nginx 接下来我们创建一个Nginx的容器。 docker run --name nginx -d nginx 但是&#xff0c;这样启动nginx容器的话我们没法访问。这个时候怎么办呢&#xff1f;就需要将Nginx这个服务暴露给外面的世界。 这时可以使…

yum命令详解

yum命令详解 文章目录 yum命令详解1. yum介绍2. yum使用说明3. yum命令的常见使用 1. yum介绍 yum&#xff08;全称为Yellow dogUpdater, Modified&#xff09;是一个在Fedora、RedHat以及CentOS中的软件包管理器&#xff0c;基于RPM包管理&#xff0c;能够从指定的服务器自动…

【C++】POCO学习总结(八):通知Notifications和事件Events

【C】郭老二博文之&#xff1a;C目录 1、Notifications和Events的区别 1&#xff09;通知Notifications&#xff1a;如果观察者不知道或不关心事件的来源&#xff0c;则使用通知Notifications。 Poco::NotificationCenter或Poco::NotificationQueue位于源source和目标target之…

【虚拟机】Docker基础 【一】

1.1.部署MySQL 首先&#xff0c;我们利用Docker来安装一个MySQL软件&#xff0c;大家可以对比一下之前传统的安装方式&#xff0c;看看哪个效率更高一些。 如果是利用传统方式部署MySQL&#xff0c;大概的步骤有&#xff1a; 搜索并下载MySQL安装包上传至Linux环境编译和配置…

Camunda 7.x 系列【57】流程设计器

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. bpmn.js2.1 简介2.2 体系结构2.3 演示3. 仿钉钉3.1 钉钉创建流程3.2 实现建议3.2…