码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 双指针算法_移动零_


    题目:

    给定一个数组 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中

     

  • 相关阅读:
    PostgreSQL DBA快速入门-通过源码编译安装
    SpringDataJPA系列1:JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?给你个选择SpringDataJPA的理由!
    【附源码】计算机毕业设计java原创网络文学管理系统设计与实现
    ARM 堆栈寻址类型区分
    海思万能平台搭建:颜色空间转换YUV2RGB
    Python 潮流周刊#48:Python 3.14 的发布计划
    Vue项目配置文件整理
    T02 ExtractSubject 项目开发总结
    产品代码都给你看了,可别再说不会DDD(九):领域事件
    阿里云ACE认证的含金量高吗?如何通过ACE认证考试?
  • 原文地址:https://blog.csdn.net/2301_76445610/article/details/136754430
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号