【LeetCode原地复写零】:双指针+逆向填充,O(n)时间O(1)空间最优解!

【LeetCode原地复写零】:双指针+逆向填充,O(n)时间O(1)空间最优解!
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:Java.数据结构
在这里插入图片描述


在这里插入图片描述

【前言】

本文聚焦 LeetCode“原地复写零”经典题目,核心需求是在固定长度数组中复写每个 0并右移其余元素,且需满足原地修改、不使用额外数组空间的约束。正向遍历易导致后续元素被覆盖,为此本文详解双指针+逆向填充的优雅解法,高效破解这一核心难点。

文章目录:

一、复写零

在这里插入图片描述

二、思路分析

复写零这道题是让在原数组修改,如果从前向后遍历,后面的元素会被覆盖,所以我们要找到被复写的最后一个元素,然后从后往前复写。运用双指针+逆向填充

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

定义两个指针:cur遍历原数组,pre模拟复写后的数组指针;cur==0时,pre向后移动两位,cur!=0时,pre向后移动两位(因为要复写0);当pre>=n-1时,停止遍历,这时,cur指的就是要复写的最后一个元素
在这里插入图片描述

边界情况:如下面这种情况,pre == n时,说明要复写的最后一个元素是0,这里单独处理

将数组最后一位改为0,也就是n==0;cur向前移动一位,pre向前移动两位;
在这里插入图片描述

2.开始从后往前复写

从cur向前遍历,cur != 0时,就让arr[pre] == arr[cur];
cur == 0时,就让pre和pre-1位置的数都改为0,然后继续向前复写。

在这里插入图片描述

三、代码展示

classSolution{publicvoidduplicateZeros(int[] arr){int cur =0, pre =-1, n = arr.length;//1.找到要复写的最后一个元素while(cur < n){if(arr[cur]==0){ pre +=2;}else{ pre++;}if(pre >= n-1){break;} cur++;}//处理边界情况if(pre == n){ arr[n-1]=0; cur--; pre -=2;}//开始从后向前复写while(cur >=0){if(arr[cur]!=0){ arr[pre--]= arr[cur--];}else{ arr[pre--]=0; arr[pre--]=0; cur--;}}}}

四、时间和空间复杂度分析

  • 时间复杂度O(n):只需要遍历数组两次,第一次定位边界,第二次逆向填充;
  • 空间复杂度O(1):使用的原数组,没有额外空间

五、总结

本解法通过双指针先定位复写边界,再逆向填充数组,既避免了正向遍历的元素覆盖问题,又实现了 O(n) 线性时间复杂度与 O(1) 常数空间复杂度的最优表现。其中“先确定边界、再逆向操作”的思路,是解决数组原地修改类问题的关键技巧,具有较强的通用性与实用性。
在这里插入图片描述

Read more

TWIST2——全身VR遥操控制:采集人形全身数据后,可训练视觉base的自主策略(基于视觉观测预测全身关节位置)

TWIST2——全身VR遥操控制:采集人形全身数据后,可训练视觉base的自主策略(基于视觉观测预测全身关节位置)

前言 我司内部在让机器人做一些行走-操作任务时,不可避免的需要全身遥操机器人采集一些任务数据,而对于全身摇操控制,目前看起来效果比较好的,并不多 * 之前有个CLONE(之前本博客内也解读过),但他们尚未完全开源 * 于此,便关注到了本文要解读的TWIST2,其核心创新是:无动捕下的全身控制 PS,如果你也在做loco-mani相关的工作,欢迎私我你的一两句简介,邀你加入『七月:人形loco-mani(行走-操作)』交流群 第一部分 TWIST2:可扩展、可移植且全面的人形数据采集系统 1.1 引言与相关工作 1.1.1 引言 如TWIST2原论文所说,现有的人形机器人远程操作系统主要分为三大类: 全身控制,直接跟踪人体姿态,包括手臂、躯干和腿部在内的所有关节以统一方式进行控制(如 HumanPlus [12],TWIST [1] ———— TWIST的介绍详见此文《TWIST——基于动捕的全身遥操模仿学习:教师策略RL训练,学生策略结合RL和BC联合优化(可训练搬箱子)》 部分全身控制,

By Ne0inhk
侠客行・iOS 26 Liquid Glass TabBar 破阵记

侠客行・iOS 26 Liquid Glass TabBar 破阵记

引子 话说侠客岛旁的 “码农山庄” 里,有位青年开发者石破天,一手 SwiftUI 功夫练得炉火纯青,身旁常伴着心思缜密的产品女侠阿绣。 这日,山庄接到一桩棘手活计 —— 玄铁老怪掌管的 “APP 审核阁” 放出话来,凡要上 iOS 26 的 APP,必过Liquid Glass设计关,尤其Tab Bar这块,稍有差池便打回重练。 在本篇侠客行中,您将学到如下内容: * 引子 * 1. 📱 初探 iOS 26 的 Tab Bar:旧功新用,基础先扎牢 * 2. 🔍 拆解 Tab Bar 的模糊特效:藏在 “滚动容器” 里的玄机 * 3. 📜 给 TabView 加 “缩骨功”

By Ne0inhk

三大扩散模型对比:Z-Image-Turbo、ComfyUI、Stable Diffusion谁更快?

三大扩散模型对比:Z-Image-Turbo、ComfyUI、Stable Diffusion谁更快? 技术选型背景与性能挑战 在AI图像生成领域,生成速度已成为决定用户体验和生产效率的核心指标。尽管Stable Diffusion系列模型凭借其强大的生成能力成为行业标准,但其通常需要数十步推理才能获得高质量结果,单张图像生成耗时往往超过30秒。随着实时创作、批量设计等场景需求激增,开发者迫切需要更高效的替代方案。 阿里通义实验室推出的 Z-Image-Turbo 模型通过蒸馏训练与架构优化,宣称可在1-10步内完成高质量图像生成,显著缩短响应时间。与此同时,ComfyUI 作为基于节点式工作流的Stable Diffusion前端工具,在灵活性和可控性上表现突出;而原始 Stable Diffusion WebUI(如AUTOMATIC1111) 则以功能全面著称。三者定位不同,但在实际使用中常被用于同类任务。 本文将从生成速度、质量稳定性、部署复杂度、资源消耗四大维度,对这三种主流扩散模型方案进行系统性对比分析,并结合真实运行数据给出选型建议。 方案一:Z-Image

By Ne0inhk

FPGA高速通信:Aurora64B/66B IP使用指南

Aurora 64B/66B IP核配置及使用详解 Aurora 64B/66B 是 Xilinx(现 AMD)提供的一种高速串行通信协议 IP 核,专为 FPGA 设计,支持点对点数据传输,适用于数据中心、高性能计算等场景。本指南将帮助初学者轻松调用该 IP 核,实现编码、译码和传输回环功能。内容包括 IP 核配置、端口介绍、使用方法、example design 调用、关键模块(如 framegen 和 framecheck)的作用,以及完整实现步骤。指南基于 Vivado 设计工具,确保真实可靠。 1. Aurora 64B/66B IP核简介 Aurora

By Ne0inhk