算法题丨Move Zeroes

简介: 描述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.

描述

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.
Note:
1.You must do this in-place without making a copy of the array.
2.Minimize the total number of operations.

示例

Given nums = [0, 1, 0, 3, 12], after calling your function, 
nums should be [1, 3, 12, 0, 0].

算法分析

难度:低
分析:给定一个数组,将所有为0的元素都移动到数组的末尾,并保持非0的元素排序保持不变。
思路:首先,思考满足第1个条件很简单,就是遍历数组,判断当前元素是否为0,如果是0,将0跟当前元素互换一下,遍历完数组就可以了。但是这样处理的话,并不能保证非0元素排序不变,所以,我们放弃这种思路。
那怎么保持非0元素的排序呢?我们考虑记录当前非0的个数索引index,遍历的时候,如果是非0元素,将数组[index]记录该元素,非0的个数索引index加1,下一个非0的就会记录在数组[index+1]中,依次类推,这样其实实现了非0元素顺序保存。最终数组[0,index)即为保持排序的非0元素。剩下的就很简单了,将数组[index]之后的元素全部置0就可以了。

代码示例(C#)

public void MoveZeroes(int[] nums)
{
    int index = 0;
    for (int i = 0; i < nums.Length; ++i)
    {
        if (nums[i] != 0)
        {
            //非0元素,记录排序
            nums[index++] = nums[i];
        }
    }
    //非0元素之后的元素全置0
    for (int i = index; i < nums.Length; ++i)
    {
        nums[i] = 0;
    }
}          

复杂度

  • 时间复杂度O (n).
  • 空间复杂度O (1).

附录

img_8f0a90f3cbaa0e044fb8bf7b13c4317b.jpe

文章作者:原子蛋
文章出处:https://www.cnblogs.com/lizzie-xhu/
个人网站:https://www.lancel0t.cn/
个人博客:https://blog.lancel0t.cn/
微信公众号:原子蛋Live+
扫一扫左侧的二维码(或者长按识别二维码),关注本人微信公共号,获取更多资源。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

目录
相关文章
|
9月前
|
存储 缓存 安全
网安入门之PHP后端基础
PHP 是一种服务器端脚本语言,广泛用于动态网站和Web应用程序开发。其文件扩展名为`.php`,支持嵌入HTML、CSS和JavaScript。PHP代码由Web服务器解析后返回给浏览器。PHP是弱类型语言,变量以`$`开头,支持字符串、整数、浮点数、布尔值、数组、对象等类型。PHP具有跨平台、开源、丰富的扩展库等特点。常用超全局变量如`$_GET`、`$_POST`、`$_SESSION`等处理用户输入和会话数据。HTTP请求方法GET和POST在数据传输方式、长度限制、安全性等方面有显著差异。
网安入门之PHP后端基础
|
11月前
|
机器学习/深度学习 数据采集 人工智能
探索人工智能中的深度学习模型优化策略
探索人工智能中的深度学习模型优化策略
383 13
【并发编程】线程间的通信
【并发编程】线程间的通信
如何设计自己创作的框架日志系统
如何设计自己创作的框架日志系统
如何设计自己创作的框架日志系统
|
算法 C++
算法与数据结构全阶班-左程云版(二)基础阶段之4.堆和比较器(下)
本文主要介绍了堆和比较器:堆包括大根堆和小根堆;比较器的实质就是重载比较运算符,可以用于普通方式的排序和自定义的排序。
算法与数据结构全阶班-左程云版(二)基础阶段之4.堆和比较器(下)
|
监控 API 索引
【阿里云MVP第五期】阿里云李靖威:Elasticsearch集群监控与报警原理解析
本文节选自阿里云MVP第五期嘉宾阿里云技术专家李靖威分享话题《使用X-Pack和Kibana实现Elasticsearch 的监控与报警》。以开源 Elasticsearch、阿里云 Elasticsearch和X-Pack的Demo show的形式, 对 Elasticsearch 集群监控和报警的内部原理进行讲解和使用方法演示。
4247 1
|
机器学习/深度学习 人工智能 算法
《从机器学习到深度学习》笔记(3)强化学习
强化学习是对英文Reinforced Learning的中文翻译,它的另一个中文名称是“增强学习”。相对于有监督学习和无监督学习,强化学习是一个相对独特的分支;前两者偏向于对数据的静态分析,后者倾向于在动态环境中寻找合理的行为决策。
1826 0