leetcode热题100.移动零

前言

作者:晓宜
🌈🌈🌈
个人简介:互联网大厂Java准入职,阿里云专家博主,csdn后端优质创作者,算法爱好者,github忠实用户
🌙🌙🌙
今天给大家带来一道双指针的题目,移动零,希望可以帮助到你
❤️❤️❤️
你的关注是我前进的动力😊

Problem: 283. 移动零

文章目录

  • 前言
  • 题目
  • 思路
  • 复杂度
  • Code

题目

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

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

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

进阶:你能尽量减少完成的操作次数吗?

思路

根据题意,我们可以直观的想到一种解法,即将所有非零的数字保存到一个数组中,然后我们将nums的前几位的值变为这个数组,后几位赋值0即可

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""temp = []for i in range(len(nums)):if nums[i]!=0:temp.append(nums[i])nums[:len(temp)] = tempfor i in range(len(temp),len(nums)):nums[i] = 0

但是题目要求所有我们必须在不复制数组的情况下原地对数组进行操作,要求空间复杂度为 O ( 1 ) O(1) O(1),我们可以采用双指针的思路
标记两个指针为left,right,分别意味着0开始的点的下标和非0数组开始的下标
一开始,如果当前数字不为0,我们就同时移动两个指针,否则,我们只移动右指针;
当我们的右指针right的值再次遇到非0数字的时候,此时left指针还在0的位置上,我们直接交换他们的值,然后两个指针都往前移动一个单位
之后,如果 n u m s [ r i g h t ] nums[right] nums[right]一直为0的话,则right右移,left不动,遇到非0则再次交换值

复杂度

时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( 1 ) O(1) O(1)

Code

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""left,right = 0,0# n = len(nums)while right<len(nums):if nums[right] !=0:nums[left],nums[right] = nums[right],nums[left]left+=1right += 1

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

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

相关文章

暴力快速入门强化学习

强化学习算法的基本思想&#xff08;直觉&#xff09; 众所周知&#xff0c;强化学习是能让智能体实现某个具体任务的强大算法。 强化学习的基本思想是让智能体跟环境交互&#xff0c;通过环境的反馈让智能体调整自己的策略&#xff0c;从反馈中学习&#xff0c;不断学习来得到…

欧科云链:2024将聚焦发展与安全,用技术助力链上数据安全和合规

近期&#xff0c;OpenAI和Web3.0两大新技术发展势头迅猛。OpenAI 再次引领AI领域的新浪潮&#xff0c;推出了创新的文本转视频模型——Sora&#xff0c;Sora 可以创建长达60 秒的视频&#xff0c;包含高度详细的场景、複杂的摄像机运动以及情感丰富角色&#xff0c;再次将AI 的…

6-190 先序输出叶节点

本题要求按照先序遍历的顺序输出给定二叉树的叶结点。 函数接口定义: void PreorderPrintLeaves( BiTree BT ); 函数PreorderPrintLeaves应按照先序遍历的顺序输出给定二叉树BT的叶结点,格式为一个字符跟着一个空格。 裁判测试程序样例: #include<stdio.h> #inc…

lora-scripts 训练IP形象

CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区&#xff0c;能复现才是好算法https://www.codewithgpu.com/i/Akegarasu/lora-scripts/lora-trainstable-diffusion打造自己的lora模型&#xff08;使用lora-scripts&#xff09;-CSDN博客文章浏览阅读1.1k次…

怿星科技Neptune CHT-S测试系统,让智能座舱测试更加高效便捷

随着汽车“智能化”浪潮的推进&#xff0c;汽车的智能化水平正在持续刷新行业认知。在这股智能化潮流中&#xff0c;智能座舱作为客户体验最为直观的部分&#xff0c;其重要性不言而喻。倘若座舱设备出现死机、黑屏、卡顿等现象&#xff0c;都将对客户的使用体验产生非常大的影…

ChatGPT无法登录,提示我们检测到可疑的登录行为?如何解决?

OnlyFans 订阅教程移步&#xff1a;【保姆级】2024年最新Onlyfans订阅教程 Midjourney 订阅教程移步&#xff1a; 【一看就会】五分钟完成MidJourney订阅 GPT-4.0 升级教程移步&#xff1a;五分钟开通GPT4.0 如果你需要使用Wildcard开通GPT4、Midjourney或是Onlyfans的话&am…

c语言--内存函数的使用(memcpy、memcmp、memset、memmove)

目录 一、memcpy()1.1声明1.2参数1.3返回值1.4memcpy的使用1.5memcpy模拟使用1.6注意 二、memmove()2.1声明2.2参数2.3返回值2.4使用2.5memmove&#xff08;&#xff09;模拟实现 三、memset3.1声明3.2参数3.3返回值3.4使用 四、memcmp()4.1声明4.2参数4.3返回值4.4使用 五、注…

【python】Anaconda安装后打不开jupyter notebook(网页不自动跳出)

文章目录 一、遇到的问题&#xff1a;jupyter notebook网页不自动跳出&#xff08;一&#xff09;输入jupyter notebook命令&#xff08;二&#xff09;手动打开网页 二、解决办法&#xff1a;指定浏览器&#xff08;一&#xff09;找文件 jupyter_notebook_config.py&#xff…

设计模式,简单工厂模式

23种设计模式是基于面向对象的一些编程逻辑思想&#xff0c;无意间看了看《大话设计模式》&#xff0c;我觉得还挺好玩&#xff0c;虽然设计模式我这个阶段确实可以不着急学&#xff0c;但我觉得这些内容挺吸引我的&#xff0c;反正时间也还多&#xff0c;就学着玩玩。而且设计…

Flink 架构深度解析

## 1. 引言 在当今的数据驱动世界中&#xff0c;实时数据处理变得越来越重要。Flink 提供了一个高性能、可扩展的平台&#xff0c;用于构建实时数据分析和处理应用。它支持事件时间处理和精确一次&#xff08;exactly-once&#xff09;处理语义&#xff0c;确保数据的准确性和…

Linux swapon命令教程:如何管理你的交换空间(附案例详解和注意事项)

Linux swapon命令介绍 swapon命令用于启用设备或文件中的交换空间。交换空间是当系统的物理内存不足时&#xff0c;系统会使用的一部分硬盘空间。 Linux swapon命令适用的Linux版本 swapon命令在大多数Linux发行版中都是可用的&#xff0c;包括Debian、Ubuntu、Alpine、Arch…

大模型在天体物理学研究中的辅助作用与案例分析

大模型在天体物理学研究中的辅助作用与案例分析 1. 背景介绍 天体物理学是研究宇宙中各种天体的物理性质和运动规律的科学。随着观测技术的进步&#xff0c;天体物理学家们获得了大量的数据&#xff0c;这些数据往往具有高维度、非线性、非平稳等特点&#xff0c;给传统的数据…

Struts2的工作原理是什么?Struts2中的MVC模式包含哪些核心组件?在Struts2中如何实现转发和重定向?

Struts2的工作原理是什么&#xff1f; Struts2的工作原理主要基于MVC设计模式&#xff0c;它充当Web应用框架的控制器层&#xff08;Controller&#xff09;&#xff0c;负责建立模型与视图之间的数据交互。 具体来说&#xff0c;Struts2的工作流程如下&#xff1a; 启动与加…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好&#xff0c;我是淘小白~ 首先&#xff0c;感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新&#xff0c;此次版本更新修改增加了一些内容&#xff1a; 1、自定义多条指令&#xff0c;软件自动判断指令条数&#xff0c;进行输入 2、增加谷歌浏览多账号轮询&#xf…

ubuntu20.04 安装ros1

详细介绍如何在ubuntu20.04中安装ROS系统&#xff0c;超快完成安装&#xff08;最新版教程&#xff09;_ubuntu安装ros-CSDN博客Ros noetic : XTDrone安装-CSDN博客 gazebo11卸载&#xff0c;安装gazebo9 我的ROS学习日记-环境搭建 - 知乎 需要选择分支 GitHub - ros-simulat…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记18_竞争市场

1. 竞争市场 1.1. 算法、大数据、超级平台的风起云涌似乎预示了市场竞争机制的加速终结&#xff0c;而我们似乎也对这种市场机制的衰退见怪不怪 1.1.1. 它有效节省了消费者的搜寻成本&#xff0c;降低了市场准入壁垒&#xff0c;开辟了市场扩张与准入之间的崭新通道&#xff…

指针空值nullptr(C++11)

c98中的指针空值 在良好的C/C编程习惯中&#xff0c;声明一个变量时最好给该变量一个合适的初始值&#xff0c;否则可能会出现不可预料的错误&#xff0c;比如未初始化的指针。如果一个指针没有合法的指向&#xff0c;我们基本都是按照如下方式对其进行初始化&#xff1a; void…

Spark-Scala语言实战(5)

在之前的文章中&#xff0c;我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实战&#xff08;…

伪分布式部署Hive

文章目录 1 Hadoop 伪分布式安装1 Hive下载2 Hive配置3 安装MySQL JDBC连接器4 连接Hive CLI4.1 初始化数据库4.2 连接Hive 1 Hadoop 伪分布式安装 假设我们已经安装好hadoop伪分布式 1 Hive下载 Hive下载地址 2 Hive配置 Hive伪分布式需要在conf文件夹下修改两个文件&…

c++核心学习5

4.6继承 有些类与类之间存在特殊的关系&#xff0c;例如下图中&#xff1a; 我们发现&#xff0c;定义这些类时&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。这个时候我们就可以考虑利用继承的技术&#xff0c;减少重复代码 4.6.1继承的基本语法…