当前位置: 首页 > news >正文

【leetcode】283.moveZeroes

题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
https://leetcode-cn.com/problems/move-zeroes/

解法一

时间复杂度:O(n)
空间复杂度:O(1)
思路:将非零值覆盖数组前方,尾部赋为零值

void moveZeroes(vector<int>& nums) {
    int j = 0;
    for (int i = 0; i < nums.size(); i ++)
    {
        if (nums[i] != 0)
        {
            nums[j++] = nums[i];
        }
    }

    for (;j < nums.size(); j ++)
    {
        nums[j]  = 0;
    }
}

解法2

时间复杂度:O(n)
空间复杂度:O(1)
思路:交换法,j表示数组首部非零位置,数组遍历到非零值后,就将其交换到前方。为了防止交换双方为同一位置(比如整个数组将为非零值),下标相等时不进行交换。

void moveZeroes(vector<int>& nums) {
    int j = 0;
    for (int i = 0; i < nums.size(); i ++)
    {
        if (nums[i] != 0)
        {
            if (i != j)
                swap(nums[i], nums[j]);
            j ++;
        }
    }
    return;
}

解法3

时间复杂度:O(n)
空间复杂度:O(1)
思路:解法2,不使用交换,使用直接赋值的方法

void moveZeroes(vector<int>& nums) {
    int j = 0;
    for (int i = 0; i < nums.size(); i ++)
    {
        if (nums[i] != 0)
        {
            if (i != j)
            {
                nums[j] = nums[i];
                nums[i] = 0;
            }
            j ++;
        }
    }
}

转载于:https://www.cnblogs.com/JesseTsou/p/10317377.html

相关文章:

  • 澳网张帅首夺大满贯 女双携斯托瑟挑落卫冕冠军
  • Stackoverflow问答:Java是传值还是传引用?
  • 华中科大提出EAT-NAS方法:提升大规模神经模型搜索速度
  • opencv 人脸识别 (一)训练样本的处理
  • 俄罗斯食品来中国“过年”
  • Python入门基础
  • 虚拟现实与大数据
  • 市场监管总局:保健食品应标注不具疾病预防治疗功能
  • Linux进程管理之“四大名捕”
  • 甘肃崆峒古镇“文化赶集”:非遗“上台”贺新春
  • [共享WIFI]将笔记本网络设置为共享WIFI
  • python之logging模块
  • MySQL创建用户与授权
  • 中国PPP管理库项目累计投资额13.2万亿元
  • 三亚:严查“先登记支付房款、后补交社保或个税”行为
  • 时间复杂度分析经典问题——最大子序列和
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CentOS 7 防火墙操作
  • egg(89)--egg之redis的发布和订阅
  • es6
  • GitUp, 你不可错过的秀外慧中的git工具
  • IOS评论框不贴底(ios12新bug)
  • js作用域和this的理解
  • markdown编辑器简评
  • PHP 7 修改了什么呢 -- 2
  • spring-boot List转Page
  • 从零开始学习部署
  • 动态魔术使用DBMS_SQL
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 高性能JavaScript阅读简记(三)
  • 解析 Webpack中import、require、按需加载的执行过程
  • 两列自适应布局方案整理
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 因为阿里,他们成了“杭漂”
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 用简单代码看卷积组块发展
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何用纯 CSS 创作一个货车 loader
  • 正则表达式-基础知识Review
  • $(selector).each()和$.each()的区别
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (12)Linux 常见的三种进程状态
  • (4)Elastix图像配准:3D图像
  • (4)logging(日志模块)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (多级缓存)缓存同步
  • (十六)一篇文章学会Java的常用API
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • .NET 8.0 发布到 IIS
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @GlobalLock注解作用与原理解析
  • @RequestBody的使用