每日一练【移动零】

一、题目描述

283. 移动零 - 力扣(LeetCode)

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

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

二、题目解析

可以将本题划分为数组划分(数组分块)的一类题。

一般这类题可以运用双指针的思路去解决。

注意这里的指针并不是真正的指针,而是利用数组下标来充当指针

两个指针的作用:

  • cur:从左到右扫描数组,遍历数组
  • dest:已经处理的区间内,非零元素的最后一个位置(所以初始要置为-1)

所以这两个指针可以把数组分为三个区间

那这两个指针是如何做到的呢?

cur从前往后遍历的过程中:

  1. 遇到0元素:cur++
  2. 遇到非零元素:

swap(dest+1,cur);然后dest和cur分别++,继续遍历。

注意快排中的双指针算法也是运用这一思想!!!

三、原码

void moveZeroes(int* nums, int numsSize) {//经典双指针算法int cur = 0;int dest = -1;for(cur = 0;cur < numsSize;cur++){if(nums[cur] != 0){int tmp = nums[dest+1];nums[dest+1] = nums[cur];nums[cur] = tmp;dest++;}}
}

四、复杂度

本题运用了双指针的算法,时间复杂度是O(N),因为cur指针遍历数组一遍,就已经按照题目要求排好序了。

空间复杂度是O(1),本题没有额外开辟数组空间。

总结,双指针算法解决数组数组划分问题,无论是时间复杂度还是空间复杂度,算法都是最优的!

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

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

相关文章

Python中调用VisualStudio创建的DLL库

1、创建DLL 打开VisualStudio2022&#xff0c;创建新项目 动态链接库-下一步 设置项目名称、项目位置、创建 单击头文件、添加、新建项 选择.h、设置名称、添加 同样的在源文件新建项&#xff0c;创建 代码&#xff1a; test.h #pragma once#ifdef BUILD_TEST #define API_S…

unity3d NPC自动寻路不移动

烘焙的路面不能有间隔&#xff0c;调整地面重新烘焙

数据结构(超详细讲解!!)第二十五节 树与森林

1.树的存储结构 和线性表一样&#xff0c;树可以用顺序和链式两种存储结构。 树的顺序存储结构适合树中结点比较“满”的情况。根据树的非线性结构特点&#xff0c;常用链式存储方式来表示树。树常用的存储方法有&#xff1a;双亲表示法、孩子表示法和孩子兄弟表…

【Linux进阶之路】进程间通信

文章目录 一、原理二、方式1.管道1.1匿名管道1.1.1通信原理1.1.2接口使用 1.2命名管道 2.共享内存2.1原理2.2接口使用 3.消息队列原理 4.信号量引入原理 总结 一、原理 进程间的通信是什么&#xff1f;解释&#xff1a; 简单理解就是&#xff0c;不同进程之间进行数据的输入输出…

Typora+PicGo+Minio搭建博客图床

文章目录 TyporaPicGoMinio搭建博客图床前言什么是图床?为什么需要图床?准备工作一、Typora二、Picgo1. 下载Picgo2. 下载node.js3. 下载minio插件 三、服务器端配置1. 添加端口到安全组2. 使用Docker安装minio3. 配置minio image-20231127175530696四、minio插件配置五、Typ…

C++ day37 贪心算法 单调递增的数字 监控二叉树

题目1&#xff1a;738 单调递增的数字 题目链接&#xff1a;单调递增的数字 对题目的理解 返回小于或等于n的最大数字&#xff0c;且数字是单调递增&#xff08;单调递增数字的定义&#xff1a;每个相邻位上的数字满足x<y&#xff09; 贪心算法 注意本题的遍历顺序是从…

【带头学C++】----- 八、C++面向对象编程 ---- 8.1 面向对象编程概述

目录 8.1 面向对象编程概述 8.1.1 面向对象概念&#xff08;OOP&#xff09; 8.1.2 面向过程概念 8.2 :: 作用域运算符 8.3 命名空间namespace 8.3.1 C的命名空间 namespace 8.3.2 命名空间 namespace使用语法 1. 创建一个命名空间&#xff1a; 2. 命名空间只能在全局…

WIN10 x86环境部署ARM虚拟机(银河麒麟)

我们经常使用的是x86架构的cpu&#xff0c;而对于不同cpu架构的arm架构的操作系统&#xff0c;我们可以通过QEMU模拟器来进行模拟一个arm环境 1、部署前的准备 arm的镜像&#xff1a; 以此镜像为例&#xff1a;Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso QE…

Co-DETR:DETRs与协同混合分配训练论文学习笔记

论文地址&#xff1a;https://arxiv.org/pdf/2211.12860.pdf 代码地址&#xff1a; GitHub - Sense-X/Co-DETR: [ICCV 2023] DETRs with Collaborative Hybrid Assignments Training 摘要 作者提出了一种新的协同混合任务训练方案&#xff0c;即Co-DETR&#xff0c;以从多种标…

人力资源管理后台 === 组织架构

目录 1.组织架构-树组件应用 2.组织架构-树组件自定义结构 3.组织架构-获取组织架构数据 4.组织架构-递归转化树形结构 5.组织架构-添加子部门-新建弹层组件 6.组织架构-添加子部门-表单结构 7.组织架构-添加子部门-表单基本校验 8.组织架构-添加子部门-表单业务校验 9…

什么是计算机病毒?

计算机病毒 1. 定义2. 计算机病毒的特点3. 计算机病毒的常见类型和攻击方式4. 如何防御计算机病毒 1. 定义 计算机病毒是计算机程序编制者在计算机程序中插入的破坏计算机功能或者破坏数据&#xff0c;影响计算机使用并且能够自我复制的一组计算机指令或程序代码。因其特点与生…

Redis面试题:分片集群相关问题

目录 面试官&#xff1a;redis的分片集群有什么作用 面试官&#xff1a;Redis分片集群中数据是怎么存储和读取的&#xff1f; 面试官&#xff1a;redis的分片集群有什么作用 候选人&#xff1a;分片集群主要解决的是&#xff0c;海量数据存储的问题&#xff0c;集群中有多个m…

0004Java程序设计-ssm基于微信小程序的校园第二课堂

文章目录 摘 要目录系统设计开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。…

锐捷:下一代防火墙修改密码

一、背景 刚接到的任务&#xff0c;锐捷行业的一台下一代防火墙的管理密码和管理地址都忘记了&#xff0c;并且命令登陆也设置了密码&#xff0c;只能通过重置的方式来进行管理&#xff0c;配置了。 本案例是一台RG-WALL 1600-S3200。 二、配置思路 1、准备环境 2、收集设备软…

“2024杭州人工智能展览会”加快推进浙江省人工智能产业创新发展

杭州市人民政府加快推进人工智能产业创新发展&#xff0c;贯彻党的二十大精神和新的发展理念&#xff0c;把握人工智能技术演进趋势和创新发展新范式&#xff0c;以促进人工智能与实体经济深度融合为主线&#xff0c;以优质算力普惠供给为基础&#xff0c;到2025年&#xff0c;…

linux用户身份切换su和 sudo

su 切换root&#xff0c;但是&#xff0c;环境变量是之前用户的 可以看到利用su切换&#xff0c;根目录还是pro1的 su - 连同环境一起切换成root&#xff0c;切换后工作目录都不一样了&#xff0c;看输入内容左侧信息&#xff0c;和第一个图片比较 -c仅执行一次命令&#xff0…

【刷题笔记】H指数||数组||二分查找的变体

H指数 1 题目描述 https://leetcode.cn/problems/h-index/ 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一…

数据结构与算法之美代码:二分查找2

目录 二分查找的变形问题代码 二分查找的变形问题 代码 package com.athome.search;public class BinarySearchDemo {public static void main(String[] args) {int[] arr {1,3,4,5,6,8,8,8,11,18};int index1 bsearch1(arr, arr.length, 8);int index2 bsearch2(arr, arr.l…

第六节HarmonyOS UIAbility内页面的跳转和数据传递

一、页面跳转 在一个应用包含一个UIAbility的场景下&#xff0c;可以通过新建多个页面来实现和丰富应用的内容。这会涉及到UIAbility内页面的新建以及UIAbility内页面的跳转和数据传递。 打开DevEco Studio&#xff0c;选择一个Empty Ability工程模板&#xff0c;创建一个工程&…

MySQL数据库【一】

博学而笃志&#xff0c;切问而近思 文章目录 数据库简介服务器、数据库以及表的关系连接数据库数据库操作命令创建数据库查看数据库创建语句查看数据库使用数据库修改数据库删除数据库 数据库字符集和校验规则查看系统默认字符集查看系统默认校验规则查看数据库支持的字符集查看…