双指针算法_移动零_

题目:

给定一个数组 num ,编写一个函数将数组内部的数字0都移动到数组的末尾,同时保持非零元素的相对顺序!

同时不能通过复制数组,开辟新的数组空间的情况下原地对数组进行操作

示例:

本题的原理: 

 本题的特点就是给定一个数组,让我们直接在数组上进行操作,将数组进行划分或者把数组分区这类操作!

双指针算法:

使用两个指针:cur、dest,将数组划分成三块区域:待处理区域、非0区域、元素0区域

让指针在移动的同时保持三个区域不进行改变,那么当待处理区域消失后,整个数组就会变成非0区域和元素0区域。

cur将区域划分为处理过的区域和待处理的区域

dest将处理过的区域划分为非0区域和元素0区域

算法解析: 

 

  • 两个指针的初始位置,因为dest要区分非0和0,但一开始并没有非0,划分的区间不存在,所以放到-1位置!
  • 其次是先后,因为cur是扫描指针,所以先让cur指针进行移动!而cur指针在扫描的时候会遇到两种情况,一种是遇到0一种是遇到非0
  •  而不论遇到什么,我们都需要保持三个区间同时存在!
  • 所以这里遇到0直接让cur移动一位,保持三个区间同时存在 cur的右边是待处理,dest+1和cur-1是0    0到dest是非0
  • 而如果遇到了非0元素则我们要让这个元素加入到非0区间,也就是0到dest的区间中,所以先将dest往后移动1位,让cur和dest的指针指向的元素进行交换后,cur在往前移

总结:

  • 遇到0元素:cur++;
  • 遇到非0元素:swap(dest+1,cur);dest++,cur++;

代码编辑: 

解析:

这里for中的cur++配合了下面的if如果遇到0元素向前移动,在这里指的是如果没有出发if中的非0条件,自动++

如果触发到了if中的非0条件,直接dest向前移动, 然后交换,其中dest向前移动写在了交换内容中,而遇到非0时dest++和cur++中的cur++是写在了for中

 

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

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

相关文章

【New Release】PostgreSQL小版本(16.2, 15.6, 14.11, 13.14,12.18) 发布了

前言 PostgreSQL遵循小版本的发布规律,这一个季度的小版本又发布了。可以算作是2024年第一个季度的版本发布。如果总结其规律:大概就是2月、5月、8月、11月的样子。通常因为11月配合大版本的发布,它是起点,也有可能就是终点。起点…

Docker 中 Nginx 反向代理

本文主角:Nginx Proxy Manager 。 使用docker安装Nginx Proxy Manager。 1、找到C:\Windows\System32\drivers\etc下的hosts文件,添加 “域名 IP"即可。 使用vscode编辑文件,保存时会提示用管理员权限保存即可。 2、Nginx Proxy Mana…

力扣大厂热门面试算法题 36-38

36. 有效的数独,37. 解数独,38. 外观数列,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.16 可通过leetcode所有测试用例。 目录 36. 有效的数独 解题思路 完整代码 Java Python 37. 解数独 解题思…

leetcode 判断是否为平衡二叉树

这个记得第一次写还是大二用c语言,当时非递归写了好久也没写完,用python递归思路简单,就是难想了一点,人生苦短,我用python哈哈哈.... 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任…

nmcli --help(nmcli -h)nmcli文档、nmcli手册

文章目录 nmcli --helpOPTION解释OBJECT解释1. g[eneral]:查看NetworkManager的状态2. n[etworking]:启用或禁用网络3. r[adio]:查看无线电状态(例如,Wi-Fi)4. c[onnection]:列出所有的网络连接…

【上海大学计算机组成原理实验报告】一、数据传送实验

一、实验目的 了解实验仪器数据总线的控制方式。掌握数据传送的基本原理。掌握各寄存器的结构、工作原理及其控制方法。 二、实验原理 根据实验指导书的相关内容,数据输入到寄存器的过程是先通过指令选择源和目标,再通过数据总线来传送数据&#xff0…

Python强大的库和框架——Pandas

NumPy 和 Pandas 是 Python 中用于科学计算和数据分析的两个重要库。 Pandas: 1. 概述: Pandas 是用于数据处理和分析的库,建立在 NumPy 的基础上,提供了高级的数据结构和数据操作工具。Pandas 的两个主要数据结构是 Series 和 DataFrame。…

Midjourney绘图欣赏系列(九)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

IOS面试题object-c 101-110

101. typeof 和 __typeof,typeof 的区别?__typeof __() 和 __typeof() 是 C语言 的编译器特定扩展,因为标准 C 不包含这样的运算符。 标准 C 要求编译器用双下划线前缀语言扩展(这也是为什么你不应该为自己的函数,变量等做这些) typeof() 与前两者完全相同的,只不过去掉…

C/C++ 知识点:| 与 || 的区别

文章目录 一、|与 || 的区别1、按位或运算符 |2、逻辑或运算符 ||3、区别4、总结 前言 在C编程语言中,逻辑或运算符用于连接两个条件表达式,当至少有一个条件为真时,整个表达式的结果为真。C提供了两种逻辑或运算符:按位或|和逻辑…

VS Code上,QT基于cmake,qmake的构建方法(非常详细)

VS Code上,QT基于cmake,qmake的构建方法 1 前言2 QT基于cmake的构建方法2.1 VS Code关键插件安装2.2 系统环境变量配置2.3 VS Code中,环境变量配置2.4 Cmake新建一个新的Porject 3 QT基于qmake的构建方法 1 前言 最近,由于认证了github的学生…

每日一篇 3.16

on course to 有望 no sign of 没有迹象 its economy continues to hum hum:蓬勃发展 unprecedented international sanctions unprecedented:前所未有的 sanction:制裁 change the constitution:改变宪法 overhauling the law:彻底修…

代码贴--动态顺序表--数据结构

本博客将记录操作系统中的动态顺序表的相关代码 头文件&#xff08;SeList.h&#xff09; #pragma once #include<stdio.h> #include<string.h> #include<stdlib.h> #include<assert.h> typedef int SQDataType; //动态顺序表typedef struct SeqList…

2024年Vue3 面试题小总结

Vue3 面试题小总结 1. OptionsAPI 与 CompositionAPI 的区别&#xff1f; OptionsAPI&#xff1a; 选项式API&#xff0c;通过定义data、computed、watch、method等属性与方法&#xff0c;共同处理页面逻辑&#xff1b;缺点&#xff1a; 当组件变得复杂的时候&#xff0c;导致…

《工厂模式(极简c++)》

本文章属于专栏《设计模式&#xff08;极简c版&#xff09;》 继续上一篇《设计原则》。本章简要说明工厂模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明&#xff1a; 简单工厂模式 方案&#xff1a;对象不直接new&#xff0c;而是通过另一个类&am…

PSCA电源控制集成之隔离和复位控制注意事项

当组件更改电源模式时&#xff0c;隔离可以被应用或移除&#xff0c;并且重置可以被断言。隔离控制和重置是异步控制的。因此&#xff0c;组件输出需要被处理&#xff0c;以便任何潜在的异步变化不会影响它们通信的功能域。 隔离单元在断电或保留电源域的输出上提供恒定值&…

websocket 使用示例

websocket 使用示例 前言html中使用vue3中使用1、安装websocket依赖2、代码 vue2中使用1、安装websocket依赖2、代码 前言 即时通讯webSocket 的使用 html中使用 以下是一个简单的 HTML 页面示例&#xff0c;它连接到 WebSocket 服务器并包含一个文本框、一个发送按钮以及 …

C++初阶:类与对象(尾篇)

目录 1. 构造函数与初始化列表1.1 对象的创建与构造函数的初始化1.2 初始化列表及构造函数存在的意义1.3 explicit关键字与构造函数的类型转换 2. static成员变量与static成员函数2.1 static成员变量2.2 static成员函数 3. 日期类流插入操作符的重载与友元3.1 友元3.2 友元函数…

基于openresty构建运维工具链实践

本文字数&#xff1a;4591字 预计阅读时间&#xff1a;25 01 导读 如今OpenResty已广泛被各个互联网公司在实际生产环境中应用&#xff0c;在保留Nginx高并发、高稳定等特性基础上&#xff0c;通过嵌入Lua来提升在负载均衡层的开发效率并保证其高性能。本文主要介绍接口鉴权、流…

前端基础——HTML傻瓜式入门(1)

该文章Github地址&#xff1a;https://github.com/AntonyCheng/html-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…