LeetCode 283:移动零 Move Zeroes
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
解题思路:
千万不要被题目局限了思维!题目让把所有0移到末尾,如果你的思路是遇零与末尾数字交换位置,然后还需要把非零数字排序,那么就被带偏了。
换个思路,把非 0 数字前移,不去管数字 0。
定义两个指针:指针 i 直接遍历数组遇到非 0 数字把该数字赋值给指针 j 所在的索引,索引 j 自增 1,i继续遍历。
这样遍历完之后,数组索引从0到 j 之间的数值即为所求得保持非零元素的相对顺序
,而 j 之后的数值只需要全部赋值 0 即可。
Java:
class Solution { public void moveZeroes(int[] nums) { int numsLen = nums.length; if (numsLen < 1) return;//数组长度小于一直接返回 int j = 0; for (int i = 0; i < numsLen; i++) {//遍历数组 if (nums[i] != 0) {//如果该数不为0 nums[j++] = nums[i];//赋值给索引j } } while (j < numsLen) nums[j++] = 0;//把从j到末尾所有数字赋值0 } }
Python3:
class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ if len(nums) < 1: return j = 0 for num in nums: if num != 0: nums[j] = num j += 1 for i in range(j, len(nums)): nums[i] = 0
如果题目不限制在原数组上操作,用python一行可解决:
nums = [i *for* i in nums *if* i != 0]+[i *for* i in nums *if* i == 0]
公众号: 爱写bug(ID:iCodeBugs)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
23、 Python快速开发分布式搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制
转: http://www.bdyss.cn http://www.swpan.cn 用命令创建自动爬虫文件 创建爬虫文件是根据scrapy的母版来创建爬虫文件的 scrapy genspider -l查看scrapy创建爬虫文件可用的母版 Available templates:母版说明basic 创建基础爬虫文件 crawl 创建自动爬虫文件csvfeed 创建爬取csv数据爬虫文件 xmlfeed 创建爬取xml数据爬虫文件 创建一个基础母版爬虫,其他同理 scrapy genspider -t 母版名称 爬虫文件名称 要爬取的域名创建一个基础母版爬虫,其他同理如:scrapy genspider -tcrawllagou www.lagou.com 第一步,配置items.py接收数据字段 default_output_processor = TakeFirst()默认利用ItemLoader类,加载items容器类填充数据,是列表类型,可以通过TakeFirst()方法,获取到列表里的内容 input_processor = MapCompose(预处理函数)设置数...
- 下一篇
移植Alios Things 到STM32F103C8
移植Alios Things 到STM32F103C8 一:开发环境搭建 1.1、配置编译环境: 您可以尝试一键安装脚本Setup Script for Linux/Mac, 或者按以下命令手动安装依赖的软件包 例:在一台 Ubuntu 16.04 LTS (Xenial Xerus) 64-bit PC 上 sudo apt-get install -y python sudo apt-get install -y gcc-multilib sudo apt-get install -y libssl-dev libssl-dev:i386 sudo apt-get install -y libncurses5-dev libncurses5-dev:i386 sudo apt-get install -y libreadline-dev libreadline-dev:i386 sudo apt-get install -y python-pip sudo apt-get install -y minicom 安装 aos-cube 首先, 用 python 包管理器 pip 来安...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Hadoop3单机部署,实现最简伪集群
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库