【优选算法】专题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;并且取得了不错的成绩。 可见季节性营销策划对产品的下载量和用户留存率还是很重要的。 那么我们如何…

16.【CPP】详解继承

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

电力物联网采集终端

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

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

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

【大模型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版本就好了。

UI 学习 二 可访问性 模式

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

H5 流光分割个人主页源码

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

电机参数辨识算法(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、物理数据库隔离、加载动态权限、多…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Flex)

以弹性方式布局子组件的容器组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。Flex组件在渲染时存在二次布局过程&#xff0c;因此在对性能有严格要求的场景下建议使用Column、Row代替。Flex组…

Vue3基础笔记(1)模版语法 属性绑定 渲染

Vue全称Vue.js是一种渐进式的JavaScript框架&#xff0c;采用自底向上增量开发的设计&#xff0c;核心库只关注视图层。性能丰富&#xff0c;完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用&#xff0c;适用于场景丰富的web前端框架。灵活性和可逐步集成…

149.乐理基础-七和弦的第一转位、第二转位、第三转位

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;148.常用的7个七和弦结构与简称 上一个内容里练习的答案&#xff1a; 前置内容&#xff1a;必须看过 140.音程的转位 和 146.三和弦的第一转位、第二转位这两个 现在还是狭义上、理论上的转位&#xff0c;下面用C…

高校实验室科研仪器开放共享存在的问题及对策建议

随着科技的迅速发展和高校科研水平的提高&#xff0c;高校实验室科研仪器的开放共享已经成为推动科研进步和创新发展的重要手段。然而&#xff0c;在实际操作中&#xff0c;我们也面临着诸多问题和挑战。本文将分析高校实验室科研仪器开放共享存在的问题&#xff0c;并提出相应…

杂七杂八111

MQ 用处 一、异步。可提高性能和吞吐量 二、解耦 三、削峰 四、可靠。常用消息队列可以保证消息不丢失、不重复消费、消息顺序、消息幂等 选型 一Kafak:吞吐量最大&#xff0c;性能最好&#xff0c;集群高可用。缺点&#xff1a;会丢数据&#xff0c;功能较单一。 二Ra…

javaEE7

1. <% page pageEncoding"UTF-8"%><% page import"java.io.*"%> <% page import"java.util.*"%> <% page import"java.math.*"%> <html> <head><title>网站计数器</title></head&…