【鼠鼠优选算法-双指针】001:移动零 & 002:复写零

【鼠鼠优选算法-双指针】001:移动零 & 002:复写零

🎈主页传送门:良木生香

🔥个人专栏:《C语言》 《数据结构-初阶》 

🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离


在学习了这么多基础知识之后,我们就从今天开始操练一下我们的基本技能吧,先来两道简单的题目试试手:

1.移动零:题目链接~~~

2.复写零:复写零

那我们就一题一题来讲讲吧~~~

一、移动零

题目描述:

看到题目,这道题是想让我们将一个数组中的所有0移动到数组的末尾.

题目意思明了,但是我们该怎么操作呢?

在这道题中我们第一个想到的就是重新创建新的数组,将数值不为0的元素移动到新的数组中,但是题目明确要求说了,只能再原地进操作,我们该怎么实现这个操作呢?又不能创建新的数组不急,我有妙招.

原理解析:

在这道题目中,我们可以用两个指针,current和dentist,一个用来遍历整个数组,另一个用来处理当下的数据

当cur遍历到值为0的元素时,就与dest交换,随后两者同时向后移动一步

但是不管cur碰到的元素是否等于0,都会向后移动一步

 

代码实现:

下面是用C语言实现的代码:

void Swap(int*a,int*b){ int temp = 0; temp = *a; *a = *b; *b = temp; } void moveZeroes(int* nums, int numsSize) { int current = 0; int dentist = 0; while(current<=numsSize-1){ if(nums[current]!=0){ Swap(nums+dentist,nums+current); dentist++; } current++; } }

我们将这段代码提交到力扣平台上,看看运行结果:

显然,通过了,那么以上就是这道题的题解了~~~

 

 

 

二、复写零

题目描述:

这道题目的意思是想让我们在对于数组中的0元素复写一遍,也就是把0再写一遍,而且不用管数组后面的元素,可以被覆盖掉.我们可以通过下面的思路进行解题:

原理解析:

在这道题中,我们首先想到的方法就是从前向后把元素都遍历一遍,在碰到0的时候就再往后移动一次写一个0,但是这样我们会发现,在复写的过程中,会把0元素后面的非零元素给覆盖掉,很显然,从前往后这种方法是行不通的,那我们不妨试试从后往前呢.

想要实现从后往前复写,我们就要找出在原数组中会被复写到的最好一个元素,这样才知道我们要性哪里开始复写.这样的话我们的思路就明了了:

1.先找出最后被复写到的元素

2.判断倒数第二个元素是不是0元素,如果是,那就直接将最后两个元素置为0

3.从后向前实现复写操作

详细代码如下:

void duplicateZeros(int* arr, int arrSize) { //第一步:先找出最后一个元素: int cur=0; int dest=-1; while(cur<arrSize){ if(arr[cur]){ dest++; } else{ dest+=2; } if(dest>=arrSize-1) break; cur++; } //现在另外判断边界情况,也就是说,只有倒数第二个是0的这种情况 if(dest==arrSize){ arr[arrSize-1] = 0; cur--; dest-=2; }

现在我们将代码提交到平台上看看结果:

显然是通过的,那么这就是这道题的所有题解啦~~~~~

 

 

文章是自己写的哈,有什么描述不对的、不恰当的地方,恳请大佬指正,看到后会第一时间修改,感谢您的阅读~

Read more

告别手动运维:Kustomize 与 ArgoCD 构建的 GitOps 体系

告别手动运维:Kustomize 与 ArgoCD 构建的 GitOps 体系 目录 告别手动运维:Kustomize 与 ArgoCD 构建的 GitOps 体系 第一部分:Kustomize —— 声明式配置管理的瑞士军刀 【专栏正文】 1.1 为什么选择 Kustomize 而不是 Helm 模板? 1.2 核心概念:Base 与 Overlay 1.3 Kustomization.yaml 语法实战 【架构师手记】 第二部分:ArgoCD —— GitOps 引擎的实现原理 【专栏正文】 2.1 什么是 GitOps? 2.2 ArgoCD

By Ne0inhk

Stable Diffusion UnCLIP 2.1技术解析与实操指南:解锁图像创意变体新维度

Stable Diffusion UnCLIP 2.1技术解析与实操指南:解锁图像创意变体新维度 【免费下载链接】stablediffusionHigh-Resolution Image Synthesis with Latent Diffusion Models 项目地址: https://gitcode.com/GitHub_Trending/st/stablediffusion 你是否曾面临这样的创作瓶颈:手握一张满意的图片,却苦于无法快速生成多种风格变体?🚀 设计师需要为同一产品制作不同场景展示图,内容创作者渴望为素材添加多样视觉风格,营销人员希望批量产出创意广告素材......这些问题在传统工作流程中往往需要大量时间和专业技能。 今天,我们将深入解析Stable Diffusion UnCLIP 2.1这一革命性技术,它不仅能够基于单张图像生成无限创意变体,更通过创新的图像嵌入机制实现了内容理解与风格转换的完美平衡。💡 问题场景:创意生产的现实困境 在数字内容爆炸的时代,视觉创意需求呈现指数级增长。传统图像处理工具在风格迁移、内容变体生成方面存在明显局限:

By Ne0inhk
用Neo4j构建医疗知识图谱加速推理

用Neo4j构建医疗知识图谱加速推理

📝 博客主页:jaxzheng的ZEEKLOG主页 Neo4j构建医疗知识图谱:解锁临床推理的加速引擎 目录 * Neo4j构建医疗知识图谱:解锁临床推理的加速引擎 * 引言:医疗决策的“时间黑洞”与图数据库的破局点 * 一、核心价值:为什么“推理加速”是医疗知识图谱的生死线? * 二、技术深度:Neo4j的推理加速引擎解剖 * 2.1 图数据库的“原生优势”如何落地? * 2.2 实战案例:从理论到急诊室 * 三、时间轴视角:从现在时到将来时的推理革命 * 3.1 现在时:已落地的“加速”价值(2024年现状) * 3.2 将来时:5-10年推理加速的三大跃迁 * 四、挑战与争议:加速背后的伦理暗流 * 4.1 数据隐私:实时推理的“双刃剑”

By Ne0inhk

Docker 安装 Neo4j 保姆级教程

Docker 安装 Neo4j 保姆级教程 本教程适用于零基础用户,详细讲解如何在 Windows 或 Linux 环境下通过 Docker 安装并配置 Neo4j 图数据库。 Neo4j 官方 Docker 文档 1. 环境准备 * 已安装 Docker(Docker Desktop 官网) * Linux 和 Windows 均可 2. 创建挂载目录 在宿主机上新建以下目录,用于数据持久化和配置挂载(以 Linux 为例,Windows 可用资源管理器新建文件夹): mkdir -p /home/neo4j/data /home/neo4j/logs /home/neo4j/conf /home/

By Ne0inhk