优先算法 —— 双指针系列 - 复写零
目录
1. 复写零
2. 算法原理
一般情况下
改为就地操作:从左到右(错误)
从右到左
总结一下解决方法:
如何找到最后一个复写的数
特殊情况
完整步骤:
3. 代码
1. 复写零
题目链接:
1089. 复写零 - 力扣(LeetCode)https://leetcode.cn/problems/duplicate-zeros/description/
2. 算法原理
其实本题严格来说是一题半模拟半双指针的题目
一般情况下
我们可以先进行异地操作,然后再优化成为双指针下的就地操作
当Cur遇到非0元素的时候,直接写下来,当遇到0的时候,就需要写两遍.....
改为就地操作:从左到右(错误)
将两个指针定义到一个数组上
但是我们发现:当cur到达第一个0时,dest执行两次写入0,将原本2的值给覆盖掉了,那么整个数组都会出现错误,所以从左到右这个方法是不可以的
从右到左
那我们来试试从右到左能否成功
因为是从右到左,所以我们将dest指向最后一个数,cur指向最后一个复写的数,以示例1为例,就是指向4
如果cur当前指向的值不为0,那么就直接把cur指向的值写入dest,再同时--
如果cur当前指向的值为0,那么cur往左移动一位,dest移动2位
然后我们发现从右到左这种方法是可以的
总结一下解决方法:
1. 先找到最后一个复写的数
2. 以从右到左的顺序完成复写操作
如何找到最后一个复写的数
双指针算法
1. 定义一个cur指向数组里第一个数的位置,dest指向-1的位置
因为要把dest定义为结果中最后一个的位置,因此我们只需要判断dest是否跑到最后一个位置就可以了
然后按照下面的步骤来重复进行:
然后就找到最后一个复写的数了
特殊情况
当查找最后一个复写的数时cur为0时,我们会发现会出现访问越界的问题,会造成内存泄漏的情况
解决方法也很简单:我们直接将4这个位置也就是n-1变为0,然后再进行cur--,dest-=2
完整步骤:
1. 先找到最后一个复写的数
2. 处理特殊情况
3. 以从右到左的顺序完成复写操作
3. 代码
class Solution {
public:void duplicateZeros(vector<int>& arr) {//1. 先找到最后一个复写的数int cur=0,dest=-1,n=arr.size();while(cur<n){//先判断cur位置的值//不为0dest往后移动1步,为0移动2步if(arr[cur]) dest++;else dest+=2;//判断一下dest是否已经到达结束位置if(dest>=n-1) break;//n为size,在数组最后一个位置的下一个位置//cur++cur++;} //2. 处理特殊情况 //如果dest越界if(dest==n){arr[n-1]=0;cur--;dest-=2;}//3. 以从右到左的顺序完成复写操作while(cur>=0){//如果cur当前指向的值不为0,那么就直接把cur指向的值写入dest,再同时--if(arr[cur]) arr[dest--]=arr[cur--];else{//为0要写2遍//然后cur往左移动一位,dest移动2位arr[dest--]=0;arr[dest--]=0;cur--;}}}
};
未完待续~
相关文章:
优先算法 —— 双指针系列 - 复写零
目录 1. 复写零 2. 算法原理 一般情况下 改为就地操作:从左到右(错误) 从右到左 总结一下解决方法: 如何找到最后一个复写的数 特殊情况 完整步骤: 3. 代码 1. 复写零 题目链接:1089. 复写零 - 力…...
初识Linux—— 基本指令(下)
前言: 本篇继续来学习Linux的基础指令,继续加油!!! 本篇文章对于图片即内容详解,已同步到本人gitee:Linux学习: Linux学习与知识讲解 Linux指令 1、查看文件内容的指令 cat cat 查看文件…...
esayexcel进行模板下载,数据导入,验证不通过,错误信息标注在excel上进行返回下载
场景:普普通通模板下载,加数据导入,分全量和增量,预计20w数据,每一条数据校验,前后端代码贴上(代码有删改,关键代码都有,好朋友们自己取舍,代码一股脑贴上了&…...
服务器数据恢复—raid5阵列热备盘上线失败导致EXT3文件系统不可用的数据恢复案例
服务器数据恢复环境: 两组分别由4块SAS硬盘组建的raid5阵列,两组阵列划分的LUN组成LVM架构,格式化为EXT3文件系统。 服务器故障: 一组raid5阵列中的一块硬盘离线。热备盘自动上线替换离线硬盘,但在热备盘上线同步数据…...
《Qt Creator:人工智能时代的跨平台开发利器》
《Qt Creator:人工智能时代的跨平台开发利器》 一、Qt Creator 简介(一)功能和优势(二)快捷键与效率提升(三)跨平台支持(四)工具介绍与使用主要特性:使用步骤…...
AG32既可以做MCU,也可以仅当CPLD使用
Question: AHB总线上的所有外设都需要像ADC一样,通过cpld处理之后才能使用? Reply: 不用。 除了ADC外,其他都是 mcu可以直接配置使用的。 Question: DMA和CMP也不用? Reply: DMA不用。 ADC/DAC/CMP 用。 CMP 其实配置好后,可以直…...
51c自动驾驶~合集31
我自己的原文哦~ https://blog.51cto.com/whaosoft/12121357 #大语言模型会成为自动驾驶的灵丹妙药吗 人工智能(AI)在自动驾驶(AD)研究中起着至关重要的作用,推动其向智能化和高效化发展。目前AD技术的发展主要遵循…...
2023年3月GESPC++一级真题解析
一、单选题(每题2分,共30分) 题目123456789101112131415答案BAACBDDAADBCDBC 1.以下不属于计算机输入设备的有( )。 A .键盘 B .音箱 C .鼠标 D .传感器 【答案】 …...
linux NFS
什么是NFS NFS是Network File System的缩写,即网络文件系统。一种使用于分散式 文件协议通过网络让不同的机器、不同的操作系统能够分享个人数据,让应用 程序通过网络可以访问位于服务器磁盘中的数据。NFS在文件传送或信息传送 的过程中,依赖…...
查看浏览器的请求头
爬虫时用到了请求头,虽然可以用网上公开的,但是还是想了解一下本机浏览器的。以 Edge 为例,其余浏览器通用。 打开浏览器任一网页,按F12打开DevTools;或鼠标右键,选择“检查”。首次打开界面应该显示在网页…...
【JavaEE进阶】 JavaScript
本节⽬标 了解什么是JavaScript, 学习JavaScript的常⻅操作, 以及使⽤JQuery完成简单的⻚⾯元素操作. 一. 初识 JavaScript 1.JavaScript 是什么 JavaScript (简称 JS), 是⼀个脚本语⾔, 解释型或即时编译型的编程语⾔. 虽然它是作为开发Web⻚⾯的脚本语⾔⽽出名,…...
后端接受大写参数(亲测能用)
重要点引入包别引用错了 import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data;JsonSerialize Data public class Item {JsonProperty(value "Token")private String token…...
Unity ShaderLab --- 实现局部透明
首先准备一张局部透明度的贴图 实现局部透明原理: 采样准备好的贴图,在片元着色中,将返回颜色的a值乘上采样后的a值 代码: fixed4 frag (v2f i) : SV_Target{fixed4 col i.color;col.a * tex2D(_MainTex, i.texcoord).a;return…...
Edify 3D: Scalable High-Quality 3D Asset Generation 论文解读
目录 一、概述 二、相关工作 1、三维资产生成 2、多视图下的三维重建 3、纹理和材质生成 三、Edify 3D 1、文本生成多视角图像的扩散模型 2、文本和多视角图像生成法线图像的ControlNet 3、重建与渲染模型 4、多视角高分辨率RGB图像生成 四、训练 1、训练过程 2、…...
银河麒麟v10 x86架构二进制方式kubeadm+docker+cri-docker搭建k8s集群(证书有效期100年) —— 筑梦之路
环境说明 master:192.168.100.100 node: 192.168.100.101 kubeadm 1.31.2 (自编译二进制文件,证书有效期100年) 银河麒麟v10 sp2 x86架构 内核版本:5.4.x 编译安装 cgroup v2启用 docker版本:27.x …...
Python浪漫之画明亮的月亮
目录 1、效果展示 2、完整版代码 1、效果展示 2、完整版代码 import turtledef draw_moon():# 设置画布turtle.bgcolor("black") # 背景颜色为黑色turtle.speed(10) # 设置绘制速度# 绘制月亮的外圈turtle.penup()turtle.goto(0, -100) # 移动到起始…...
【前端】JavaScript 中的函数嵌套:从基础到深度应用的全面指南
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是函数嵌套示例代码 💯函数嵌套的意义与优势1. 封装性与模块化2. 闭包的实现与应用3. 回调与高阶函数4. 工厂模式 💯函数嵌套的不同应用场景…...
微信小程序条件渲染与列表渲染的全面教程
微信小程序条件渲染与列表渲染的全面教程 引言 在微信小程序的开发中,条件渲染和列表渲染是构建动态用户界面的重要技术。通过条件渲染,我们可以根据不同的状态展示不同的内容,而列表渲染则使得我们能够高效地展示一组数据。本文将详细讲解这两种渲染方式的用法,结合实例…...
全面击破工程级复杂缓存难题
目录 一、走进业务中的缓存 (一)本地缓存 (二)分布式缓存 二、缓存更新模式分析 (一)Cache Aside Pattern(旁路缓存模式) 读操作流程 写操作流程 流程问题思考 问题1&#…...
python安装包中的一些问题(三):加载 matplotlib 的过程中,调用了 Pillow(PIL 库)时发生了错误
报错: runfile(/Volumes/Expansion/Stuttgart/code_run/glacier_map_hugonnet/test_image_cut.py, wdir/Volumes/Expansion/Stuttgart/code_run/glacier_map_hugonnet) Traceback (most recent call last): File /opt/anaconda3/lib/python3.11/site-packages/spyd…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...











