【优选算法】专题1 -- 双指针 -- 移动零

前言:

📚为了提高算法思维,我会时常更新这个优选算法的系列这个专题是关于双指针的练习

🎯个人主页:Dream_Chaser~-CSDN博客

一.移动零(easy)

描述:

   「数组分两块」是⾮常常⻅的⼀种题型,主要就是根据⼀种划分⽅式,将数组的内容分成左右两部分。这种类型的题,⼀般就是使⽤「双指针」来解决。
题目链接 . 移动零 - 力扣(LeetCode)

题目描述:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例:

算法原理:

      快速排序:快排里面最核心的那一步 -- 数据划分

       推荐博客:回调函数(指针进阶2,详解,小白必看)

    给你一个数组,然后给一个基准元素设这个基准元素为tmp根据这个元素把数组划分成两个部分:

但是快排也有缺陷:

      当数据的值都是相差不大的时候(很多数据都是相等的),时间复杂度是逼近 O(N^2)

解题思路:

      我们就给按快排的原理对数组划分,数组分块:

📌 接着我们需要使用到双指针算法解决该题,本质是利用数组下标来充当指针

🚩两个指针的作用:

cur:从左往右扫描数组,遍历数组
dest:已处理的区间内,非零元素的最后一个位置 (基准元素tmp)

我们可以看到两个指针将这个数组分成了三个区间: 

💥三个区间分别是:

如何实现:

cur 从前往后遍历的过程中:
        1.遇到 0 元素:cur++; (dest不动,cur从头到尾都要动)
        2.遇到 非 0 元素:

                swap(dest + 1, cur);

                dest++,cur++;

图片解析:

原图:

循环结束标志:

动图: 

编写代码:

class Solution {
public:void moveZeroes(vector<int>& nums) {for(int cur =0,dest = -1;cur<nums.size();++cur){if(nums[cur])//处理非0元素swap(nums[++dest],nums[cur]);}}
};

🔧本文修改次数:0

🧭更新时间:2024年3月15日

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

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

相关文章

架构设计的核心目的与意义

以史为鉴&#xff0c;对我们了解架构设计的目的很有帮助。谈到架构设计&#xff0c;相信每个技术人员都是耳熟能详&#xff0c;但如果深入探讨一下&#xff0c;“为何要做架构设计&#xff1f;”或者“架构设计目的是什么&#xff1f;”类似的问题&#xff0c;大部分人可能从来…

单片机卡死的几大原因、分析、解决

阅读引言&#xff1a; 本文我想给大家分享一下我在学习过程中遇到的以及了解到的一些导致单片机运行卡死&#xff08;死锁&#xff09;的一些常见原因和解决办法&#xff0c; 请注意&#xff0c; 只是列举&#xff0c;并不是全部&#xff0c; 因为导致单片机运行卡死的原因无穷…

Qt-QPainter drawText方法不同重载之间的区别

QPainter类的drawText方法有如下重载&#xff1a; void drawText(const QPointF &position, const QString &text) void drawText(const QPoint &position, const QString &text) void drawText(int x, int y, const QString &text) void drawText(co…

APP在应用商店该如何做好节日营销

38妇女节刚刚过去&#xff0c;不少商家吃上了一波节日红利。 你有没有注意到很多App在应用商店里改头换面&#xff0c;开展了很多以“三八节”为主题的营销活动&#xff0c;并且取得了不错的成绩。 可见季节性营销策划对产品的下载量和用户留存率还是很重要的。 那么我们如何…

【芯片SoC设计概念】

SoC概念简介 0 Introduction0.1 Concept 1 SoC关注点1.1 SoC总线1.2 SoC存储器1.3 处理器1.4 软硬件接口 0 Introduction 0.1 Concept 在芯片设计概念当中&#xff0c;有几个名词概念&#xff0c;先理解清楚&#xff1b; FPGA VS ASIC: FPGA芯片就是可编程芯片&#xff0c;可…

16.【CPP】详解继承

继承方式 如图 注意点 1.基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中&#xff0c;但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它 2.基类private成员在派生类中是不能被访问&#x…

电力物联网采集终端

电力物联网采集终端,通过采集设备数据&#xff0c;并将其传输到云端&#xff0c;实现精细管理和优化。 一、工作原理 电力物联网采集终端主要数据采集模块、通信模块等组成。采集设备的各项数据&#xff0c;如温度、湿度、电流等;数据采集模块将采集到的数据进行处理并存储;通…

Android垃圾回收机制

1.垃圾回收机制 垃圾回收&#xff0c;也叫GC(Garbage Collection)&#xff0c;指的是释放垃圾占用的空间&#xff0c;防止内存泄露。有效的使用可以使用的内存&#xff0c;对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。 JVM的内存区域主要分为程序计数器、虚…

索尼ILME-FX3摄像机RSV文件无法播放的修复方法

索尼摄像机rsv文件修复案例处理了很多&#xff0c;rsv是索尼mp4或者mxf文件封装失败时生成的临时文件&#xff0c;一般是由于断电或者摄像机意外重启导致的&#xff0c;下边来看下遇到rsv文件无法播放时的修复方法。 故障文件: 29.56G/rsv文件 故障现象: 摄像机型号为索尼IL…

wsl-oraclelinux 固定ip

wsl-oraclelinux 固定ip 0. 引言1. Windows 创建启动脚本2. 配置 wsl Oracle Linux 0. 引言 工作需要&#xff0c;安装了一个 wsl Oracle Linux 8.9&#xff0c;也想给它一个固定的 ip。 1. Windows 创建启动脚本 删除 PSScheduledJob&#xff0c; notepad $PSHOME\powersh…

【大模型API调用初尝试一】智谱AI 通义千问

大模型API调用初尝试一 调用大模型API能干什么智谱AI大模型API调用的过程获取API_KEYGLM_4同步调用GLM_4异步调用文生图大模型API调用 阿里云通义千问API调用过程单轮会话多轮会话 调用大模型API能干什么 大模型的参数非常庞大&#xff0c;功能非常强大&#xff0c;但是训练成…

node:internal/crypto/hash:69 this[kHandle] = new _Hash(algorithm, xofLen);

npm 打包报错 原因就是npm版本太高了&#xff0c;用的18版本&#xff0c;切换成16版本就好了。

Skip Index 学习

列存中的 skip index 是什么概念 列存数据库&#xff08;Columnar database&#xff09;中的 skip index 是一种优化查询性能的索引方法。在列存数据库中&#xff0c;数据是按列而不是按行存储的&#xff0c;这使得针对特定列的查询可以非常迅速。然而&#xff0c;即使是在列存…

UI 学习 二 可访问性 模式

教程&#xff1a;Accessibility – Material Design 3 一 颜色对比 颜色和对比度可以用来帮助用户看到和理解应用程序的内容&#xff0c;与正确的元素交互&#xff0c;并理解操作。 颜色可以帮助传达情绪、语气和关键信息。可以选择主色、辅助色和强调色来支持可用性。元素之…

H5 流光分割个人主页源码

源码名称&#xff1a;流光分割个人主页源码 源码介绍&#xff1a;一款流光分割特效个人主页源码&#xff0c;源码带大量跳转个人联系方式按钮和朋友按钮。同时带有个人介绍。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.changyouzuhao.cn/10241.html

http模块 之 如何创建一个http服务?

一、如何创建一个http服务&#xff1a; (1)导入http模块 const httprequire(http);(2)创建一个 HTTP 服务器对象 const serverhttp.createServer((request,response)>{ // createServer接收一个实参&#xff0c;该实参是一个函数。函数可以是箭头函数匿名函数function等等…

电机参数辨识算法(2)——基于高频注入的磁链辨识策略

电机参数辨识算法&#xff08;1&#xff09;——基于高频注入的电感辨识策略-CSDN博客https://blog.csdn.net/m0_46903653/article/details/136722750?spm1001.2014.3001.5501上一期已经讲过了电感辨识方法。 今天这是参数辨识的第二期&#xff0c;今天来简单看看磁链的辨识。…

【数学建模】熵权法

之前我们学了层次分析法和topsis法&#xff0c;但是主观性十分强&#xff0c;有没有科学的方法得出权重呢&#xff1f;今天&#xff0c;我们来学习熵权法&#xff01; 基本概念&#xff1a; 熵权法&#xff0c;物理学名词&#xff0c;按照信息论基本原理的解释&#xff0c;信息…

SpringBoot+vue3打造企业级一体化SaaS系统

SpringBootvue3打造企业级一体化SaaS系统 简介&#xff1a;    全面提升前后端技术水平&#xff0c;独立完成全栈项目开发能力&#xff0c;快速进击全栈工程师&#xff0c;最终在面试中脱颖而出。整合后端主流技术&#xff08;Spring Boot、物理数据库隔离、加载动态权限、多…

深度学习-2.6在MINST-FASHION上实现神经网络的学习流程

文章目录 在MINST-FASHION上实现神经网络的学习流程1. 导库2. 导入数据&#xff0c;分割小批量3. 定义神经网络4.定义训练函数5.进行训练与评估 在MINST-FASHION上实现神经网络的学习流程 现在我们要整合本节课中所有的代码实现一个完整的训练流程。 首先要梳理一下整个流程&a…