【优选算法】复写零

链接:1089. 复写零 - 力扣(LeetCode)

算法原理:

解法:双指针算法

根据“异地”操作,然后优化成双指针下的“就地”操作

1.先找到最后一个“复写”的数

        1.先判断 cur 位置的值

        2.决定 dest 向后移动一步或者两步

        3.判断一下 dest 是否已经到结束为止

        4.cur++;

        5.处理一下边界情况: n-1 = 0;

                                            cur--;

                                            dest -= 2;

2.“从后向前”完成复写操作

代码如下:

class Solution {public void duplicateZeros(int[] arr) {int cur = 0, dest = -1, n = arr.length;//1.先找到最后一个需要复写的数while(cur < n){if(arr[cur] == 0){dest += 2;}else{dest += 1;}if(dest >= n-1){break;}cur++;}//2.处理一下边界情况if(dest == n){arr[n-1] = 0;cur--;dest -=2;}//3.从后向前完成复写while(cur >= 0){if(arr[cur] != 0){arr[dest--] = arr[cur--];}else{arr[dest--] = 0;arr[dest--] = 0;cur--;}}}
}

复杂度分析:

  • 时间复杂度:O(n),虽然是两个while循环,但是常数部分可以忽略不计,相当于遍历一遍数组就完成了
  • 空间复杂度:O(1)

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

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

相关文章

鸿蒙之路的坑

1、系统 Windows 10 家庭版不可用模拟器 对应的解决方案【坑】 升级系统版本 直接更改密钥可自动升级系统 密钥找对应系统的&#xff08;例&#xff1a;windows 10专业版&#xff09; 升级完之后要激活 坑1、升级完后事先创建好的模拟器还是无法启动 解决&#xff1a;删除模拟…

大模型应用—IOPaint 图片去水印

IOPaint 是由 SOTA AI 模型提供支持的免费开源修复和修复工具,可以轻松实现图片去水印,去除图片不需要的部分,是目前效果最好的一个项目!完全免费开源 IOPaint 已经托管到 hugging face上,打开就可以直接免费使用,需要外网环境! 在线免费使用:【链接直达】 如果你需要…

SpringBoot项目的5种搭建方式(以idea2017为例)

目录 1. idea中使用官方API 2. idea中使用阿里云API 3. 在spring官网创建 4. 在阿里云官网创建 5. Maven项目改造成springboot项目 SpringBoot项目的创建细分一共有5种&#xff0c;其实主要分为以下三种&#xff1a; ①使用开发工具idea创建springboot项目&#xff08; Sp…

【Java 学习】详细讲解---包和导包、Scanner类、输入源

1. 包 1.1 什么是包&#xff1f; 举个例子&#xff0c;你和你的同学有不同的家庭&#xff0c;你们都有自己的爸爸妈妈&#xff0c;都有自己的家。在自己的家中你们可以按照自己爱好摆放东西&#xff0c;都互不干扰。但是&#xff0c;假如你们的家都在一起&#xff0c;你们就不…

某科技局国产服务器PVE虚拟化技术文档

环境介绍 硬件配置 服务器品牌&#xff1a;黄河 型号&#xff1a;Huanghe 2280 V2 Cpu型号&#xff1a;kunpeng-920 磁盘信息 :480SSD * 2 ,4T*4 网卡&#xff1a;板载四口千兆 如下表 四台服务器同等型号配置&#xff0c;均做单节点虚拟化&#xff0c;数据保护采用底层r…

汽车免拆诊断案例 | 2011 款奔驰 S400L HYBRID 车发动机故障灯异常点亮

故障现象 一辆2011款奔驰 S400L HYBRID 车&#xff0c;搭载272 974发动机和126 V高压电网系统&#xff0c;累计行驶里程约为29万km。车主反映&#xff0c;行驶中发动机故障灯异常点亮。 故障诊断 接车后试车&#xff0c;组合仪表上的发动机故障灯长亮&#xff1b;用故障检测…

手把手教你安装配置『Oracle Database 19c』

前言 本文将会讲解如何在 Windows 系统上安装 Oracle Database 19c 数据库&#xff0c;适合初学者学习 Oracle 快速入门和实践练习&#xff0c;比较方便快捷 官方安装文档&#xff1a;Preinstallation Considerations for Installing Oracle Database 对于企业级的数据库&am…

学习solid works第七课------装配体

一、新建装配体 一、文件→新建&#xff0c;然后选择装配体 二、界面介绍 二、添加零件 装配体→插入零部件→选择零件再确定。 如果已经打开了零件&#xff0c;在添加零件的时候可以直接点击打开文档直接添加。 有时候一个零件需要多个地方使用&#xff0c;我们可以直接按住…

嵌入式驱动开发详解21(网络驱动开发)

文章目录 前言以太网框架ENET 接口简介MAC接口MII \ RMII 接口MDIO 接口RJ45 接口 PHY芯片以太网驱动驱动挂载wifi模块挂载后续 前言 linux驱动主要是字符设备驱动、块设备驱动还有网络设备驱动、字符设备驱动在本专栏前面已经详细将解了&#xff0c;网络设备驱动本文会做简要…

漏洞扫描:网络安全的 “体检” 与 “防护指南”

在当今数字化时代&#xff0c;网络安全如同守护城堡的坚固城墙&#xff0c;而漏洞扫描则是检查城墙是否存在缝隙与薄弱环节的重要手段。那么&#xff0c;究竟什么是漏洞扫描&#xff1f;又该如何进行呢&#xff1f; 什么是漏洞扫描&#xff1f; 漏洞扫描是一种安全检测过程&a…

Flutter 实现文本缩放学习

Flutter 如何实现一个简单的文本缩放应用程序&#xff0c;其中包含一个可以增加或减少文本大小的功能。 前置知识点学习 TextScaler TextScaler 是一个用于控制文本缩放的工具或机制&#xff0c;不过需要注意的是&#xff0c;TextScaler 并不是 Flutter 框架中内置的类。在 …

接口自动化测试框架(pytest+allure+aiohttp+用例自动生成)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 近期准备优先做接口测试的覆盖&#xff0c;为此需要开发一个测试框架&#xff0c;经过思考&#xff0c;这次依然想做点儿不一样的东西。 接口测试是比较讲究效…

PG备份恢复--pg_dump

pg_dump pg_dump 是一个逻辑备份工具。使用 pg_dump 可以在数据库处于使用状态下进行一致 性的备份,它不会阻塞其他用户对数据库的访问 。 一致性备份是 pg_dump 开始运行时&#xff0c;给数据库打了一个快照&#xff0c;且在 pg_dump 运行过程 中发生的更新将不会被备份。 …

Docker 入门:如何使用 Docker 容器化 AI 项目(二)

四、将 AI 项目容器化&#xff1a;示例实践 - 完整的图像分类与 API 服务 让我们通过一个更完整的 AI 项目示例&#xff0c;展示如何将 AI 项目容器化。我们以一个基于 TensorFlow 的图像分类模型为例&#xff0c;演示如何将训练、推理、以及 API 服务过程容器化。 4.1 创建 …

【stm32can】

can时钟 can波特率计算&#xff08;位同步内容&#xff09; ss是固定的1tq&#xff0c; pts&#xff0c;pbs1&#xff0c;pbs2是用户设定值 同步时间段的理解有误&#xff1f; 原文出处 数据帧 遥控帧

Next.js 14 性能优化:从首屏加载到运行时优化的最佳实践

在现代 Web 应用中&#xff0c;性能优化直接影响用户体验和业务转化。Next.js 14 提供了多种内置的性能优化特性&#xff0c;今天我们就来深入探讨如何充分利用这些特性&#xff0c;以及一些实用的优化技巧。 图片和字体优化 1. 图片优化 Next.js 的 Image 组件供了强大的图…

php8.0版本更新了哪些内容

PHP 8.0版本是PHP语言的一个重要更新&#xff0c;它引入了许多新特性和改进&#xff0c;旨在提高性能、增强代码的可读性和可维护性。以下是PHP 8.0版本更新的主要内容&#xff1a; 一、性能提升 JIT编译器&#xff1a;PHP 8.0引入了Just-In-Time&#xff08;JIT&#xff09;…

在 Ubuntu 服务器上添加和删除用户

在 Ubuntu 服务器上添加和删除用户通常使用命令行工具&#xff0c;如 adduser、useradd、deluser 等。以下是详细的步骤和说明&#xff1a; 添加用户 使用 adduser 命令 adduser 是一个更为友好的脚本&#xff0c;用于创建新用户并设置相关信息。 添加新用户 sudo adduser 用…

docker 部署win系统

1、拉取docker win镜像 docker push crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/upsnap/windows:latest 2、配置docker-compose.yml文件 services:windows:image: dockurr/windowscontainer_name: windowsenvironment:VERSION: "11"devices:- …

复习打卡大数据篇——Hadoop HDFS 03

目录 1. HDFS元数据存储 2. HDFS HA 高可用 1. HDFS元数据存储 HDFS中的元数据按类型可以分为&#xff1a; 文件系统的元数据&#xff1a;包括文件名、目录名、修改信息、block的信息、副本信息等。datanodes的状态信息&#xff1a;比如节点状态、使用率等。 HDFS中的元数…