题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
来源:力扣(LeetCode)

解题思路

  此题可以用“冒泡”来解决遍历当前数组当遇到不是0的数字就将它往前“冒”,直到碰到非零数字或者左括号。

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""def move(i):while nums[i-1]==0 and i>0:  #将第i个数字(非零)前的零移动至它的后头temp=nums[i]nums[i]=nums[i-1]nums[i-1]=tempi-=1for i in range(len(nums)):  #逐一检查非零数字并进行移动if nums[i]!=0 and i!=0:move(i)


  这样的冒泡显然是十分耗费时间的,如果数组的前端有大量的零,那么这些非零的数字恐怕是要经过长时间的“迁徙”才能到达相应的位置,这中间无疑有许多的无效移动。题目有个隐藏的属性,那就是非零数字有相对顺序,但是为零的数字顺序就变得不那么重要了,我们只需要知道非零数字它最终应该在数组中的位置即可。基于此,我们可以设置一个计数器用来记录非零数字的位置信息,当遇到一个非零数字时计数器加一,此时的计数器所示的便是当前非零数字的最终位置。

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""count=-1num=0for i in nums:  #将对应的非零数字放入最终的位置if i!=0:count+=1nums[count]=i  else:num+=1  #统计零的个数if num!=0:  #在数组尾部更新为零nums[-num:]=num*[0]

LeetCode简单题之移动零相关推荐

  1. LeetCode简单题之复写零

    题目 给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移. 注意:请不要在超过该数组长度的位置写入元素. 要求:请对输入的数组 就地 进行上述修改,不要从 ...

  2. LeetCode简单题之和为零的N个唯一整数

    题目 给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 . 示例 1: 输入:n = 5 输出:[-7,-1,1,3,4] 解释:这些数组也是 ...

  3. LeetCode简单题之柠檬水找零

    题目 在柠檬水摊上,每一杯柠檬水的售价为 5 美元.顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元.你必 ...

  4. LeetCode简单题之基于排列构建数组

    题目 给你一个 从 0 开始的排列 nums(下标也从 0 开始).请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans ...

  5. LeetCode简单题之Excel 表中某个范围内的单元格

    题目 Excel 表中的一个单元格 (r, c) 会以字符串 "" 的形式进行表示,其中: 即单元格的列号 c .用英文字母表中的 字母 标识. 例如,第 1 列用 'A' 表示, ...

  6. LeetCode简单题之增量元素之间的最大差值

    题目 给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 ...

  7. LeetCode简单题之二进制矩阵中的特殊位置

    题目 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 . 特殊位置 定义:如果 mat[i][j] == 1 ...

  8. LeetCode简单题之设计 Goal 解析器

    题目 请你设计一个可以解释字符串 command 的 Goal 解析器 .command 由 "G"."()" 和/或 "(al)" 按某种 ...

  9. LeetCode简单题之检查两个字符串数组是否相等

    题目 给你两个字符串数组 word1 和 word2 .如果两个数组表示的字符串相同,返回 true :否则,返回 false . 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串. ...

最新文章

  1. 清华大数据软件成果亮相第三届数字中国建设峰会成果展览
  2. 暴力枚举 UVA 725 Division
  3. STL之map中排序方式的重载
  4. 云服务器(Centos)部署SVN
  5. c语言用递归方法实现冒泡排序,C语言 冒泡排序 递归法
  6. python标准库math用法精要
  7. hive表名命名规范_数据仓库开发规范
  8. Windows 11正式发布!网友的这波吐槽,太搞笑了。。。
  9. matlab 韩明距离_科学网—Matlab中 pdist 函数详解(各种距离的生成) - 朱新宇的博文...
  10. zfs编译之后,内核模块没更新的解决方案
  11. Openpose2d转换3d姿态识别
  12. Android/安卓 文本添加中划线、下划线的方法
  13. R语言中的cor和cov
  14. uni-app视频保存到本地/相册
  15. 【26天高效学完Java编程】Day03:Java中的运算符与流程控制语句的基本概念与实操
  16. 计算机网络实验-验证性实验
  17. 虚拟机上安装eclipse教程
  18. 中学生活是人生中最美好的时光
  19. web性能优化--用gzip压缩资源文件
  20. 956分通过CCNA的网络技术学习历程!(转文)

热门文章

  1. 2021-2027年中国中高端女装行业市场分析预测及投资方向研究报告
  2. 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)
  3. Go 知识点(19)— Go 语言中的野指针
  4. 2022-2028年中国塑料安瓿瓶行业市场研究及前瞻分析报告
  5. windows阿里云服务器配置
  6. idea内Maven的全局配置
  7. visual2017中给C#项目添加配置文件
  8. tensorflow学习笔记(二十五):ConfigProtoGPU
  9. Python3 try-except、raise和assert解析
  10. pycharm debug后会出现 step over /step into/step into my code /force step into /step out 分别表示...