算法40:移动零

news2024/11/24 12:03:27

一、需求

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

进阶:

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

二、思路分析图

(一)递归方案(双指针方案)

在这里插入图片描述

三、代码

(一)数据初始化

/**
 * 入口
 * 283、移动零
 * 输入:
 * nums = [0,1,0,3,12]
 * 输出:
 * result1 = [1,3,12,0,0]
 * 解释:
 * 1.递归方案
 * 2.O(n)方案
 */
@Test
public void suanfa40()
{
    // 初始化
    int[] nums1 = {0, 1, 0, 3, 12};
    int[] nums2 = {0, 1, 0, 3, 12};

    // 打印
    // 迭代方案【自己写的方案】
    int[] result1 = this.for2MoveZeroes(nums1);
    System.out.println("result1 = " + result1);
    Arrays.stream(result1).forEach(System.out::println);

    // 迭代方案【O(n)方案】
    int[] result2 = this.for1MoveZeroes(nums2);
    System.out.println("result2 = " + result2);
    Arrays.stream(result2).forEach(System.out::println);
}

(二)递归方案【自己写的方案】

/**
 * 迭代方案【自己写的方案】
 *
 * @param nums
 * @return
 */
public int[] for2MoveZeroes(int[] nums)
{
    int numsLength = nums.length - 1;
    int j = 0;
    int temp = 0;
    // A B
    for (int i = 0; i <= numsLength; i++)
    {
        // A == 0
        if(nums[i] == 0)
        {
            j = i + 1;
            while (j <= numsLength)
            {
                if (nums[j] == 0)
                {
                    j++;
                }
                else
                {
                    temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                    j += numsLength;
                }
            }
        }
    }
    return nums;
}

(三)递归方案【O(n)方案】

/**
 * 迭代方案【O(n)方案】
 *
 * @param nums
 * @return
 */
public int[] for1MoveZeroes(int[] nums)
{
    // 先处理非0参数,j就是按循序记录
    int j = 0;
    for (int i = 0; i < nums.length; i++)
    {
        if (nums[i] != 0)
        {
            nums[j] = nums[i];
            j++;
        }
    }
    return nums;
}

(四) 结果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2rC9sfBz-1691634423875)(总img/283、移动零/image-20230810100850753.png)]

作者:王子威

四、总结

  • 学习了移动零算法
  • 我的想法,循环列表只要碰到0就用双指针方案调整0的位置,如果遇到同样是0 那就下一个在调整
  • 思维转换-不要只针对0去做调整,将非0 数据排序好,那么剩余的数据都是0
  • 算法兴趣+1 总:40
  • 加强了对算法的分析能力

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

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

相关文章

opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()

注意&#xff1a;新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性&#xff0c;以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程&…

B2B2C多商户电子商务网站开发--海外商城系统搭建

一、明确目标与需求 在开始搭建海外商城系统之前&#xff0c;企业需要明确自己的目标和需求。例如&#xff0c;要面向哪些国家和地区、主要销售哪些产品、需要提供哪些语言和货币支持等。这些目标和需求将有助于企业制定合理的开发计划和方案。 二、选择合适的开发平台和工具…

【安装部署】Mysql下载及其安装的详细步骤

1.下载压缩包 官网地址&#xff1a;www.mysql.com 2.环境配置 1.先解压压缩包 2.配置环境变量 添加环境变量&#xff1a;我的电脑--->属性-->高级-->环境变量-->系统变量-->path 3.在mysql安装目录下新建my.ini文件并&#xff0c;编辑my.ini文件 编辑内容如…

Linux常规操作命令

日升时奋斗&#xff0c;日落时自省 目录 1、vim 1.1、工作模式 1.2、末行模式操作相关命令 1.2.1、保存退出操作 1.2.2、查找替换 1.3、输入模式操作相关命令 1.3.1、移动相关命令 1.3.2、删除和剪切命令 1.3.3、复制操作 1.3.4、撤销 2、head 3、tail 4、ps 5、…

HTTP代理与HTTPS代理请求的方式揭秘

今天&#xff0c;我们要一起来揭秘HTTP代理与HTTPS代理请求的方式&#xff0c;帮助大家更好地理解和使用这两种代理。我们将分析它们的不同之处&#xff0c;并提供一些实际的例子和操作经验&#xff0c;让你轻松玩转网络请求&#xff01; HTTP代理请求方式&#xff1a; HTTP代…

IBM Spectrum LSF 分布式系统(作业调度系统),提高高性能计算(HPC)的价值

IBM Spectrum LSF Suites 凭借更快的处理和更轻松的处理&#xff0c;提高高性能计算的价值 要点 通过隐藏工作负载密集型计算环境的复杂性&#xff0c;提高用户生产效率简化计算集群管理并划分工作负载优先级&#xff0c;以快速满足竞争激烈的行业瞬息万变的需求通过优化系统…

LLM - CUDA out of memory. 到底怎么事

目录 一.引言 二.报错日志 1.日志数据 2.日志提示 ◆ max_split_size_mb ◆ See documentation ◆ 更多解决方案 三.日志扩展 1.Reserved Memory 是什么&#xff1f; 2.Tired to allocate 小于 free MiB 就会报 OOM 嘛? 3.already allocated 是当前任务占用内存&a…

【高危】 Microsoft Teams 远程代码执行漏洞

漏洞描述 Microsoft Teams 是微软推出的一款团队协作平台&#xff0c;提供了聊天、通话、在线会议、文件共享等功能。 Microsoft Teams 受影响版本中&#xff0c;当用户加入攻击者设置的恶意 Microsoft Teams 会议时&#xff0c;攻击者可远程执行任意代码。 漏洞名称Microso…

游戏类APP的如何设置广告场景最大化用户价值?提升变现收益?

最近几年&#xff0c;游戏类市场的不断增长激发了广告主预算的不断投入&#xff0c;越来越多的游戏类APP通过广告变现的方式增收&#xff0c;并且获得持续上涨的eCPM。 具有潜力的游戏品类参考 根据游戏品类的增长数据和广告收益规模&#xff0c;休闲/模拟/街机均为收益正向的…

Echarts 让饼图中间文字居中并自适应图表

背景&#xff1a; 产品提出需求在饼图中间放两行文字且居中 “简单&#xff0c;劈劈啪啪写完了” 产品再提出你这个没有自适应啊&#xff0c;屏幕放大、缩小你这个就没有居中了&#xff0c;甚至会和饼图重叠 “emmmmm…" UI图如下&#xff1a; 方案一&#xff1a;使用ti…

数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)

目录 开放地址法&#xff08;Open Addressing&#xff09; 线性探测&#xff08;Linear Probing&#xff09; 散列表查找性能分析 平方探测&#xff08;Quadratic Probing&#xff09; 定理 平方探测法的查找与插入 双散列探测法&#xff08;Double Hashing&#xff09…

【C语言】经典题目(四)

HI&#xff0c;大家好~&#x1f61d;&#x1f61d;这是一篇C语言经典题目的博客。 更多C语言经典题目及刷题篇&#xff0c;可以参考&#xff1a; &#x1f338; 【C语言】经典题目(一) &#x1f338; 【C语言】经典题目(二) &#x1f338; 【C语言】经典题目(三) &#x1f338;…

生信分析pandas数据处理 Python简明教程 | 视频17

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

ant design pro 中ModalForm的参数open无法控制的问题

根据antd自己的说明&#xff0c;visible这个参数在下个版本会被替换成open&#xff0c;所以今天我试着用open。 但是用了open之后发现这个model弹不出来&#xff0c;用visible是正常的。 那么问题在哪呢&#xff1f;又是在import的位置不对 open可以使用的是&#xff1a; imp…

在2023年及以后可以改善企业业务的五种软件

在当今互通互联的世界&#xff0c;依赖人工流程和传统方法的日子早已过去。目前&#xff0c;各种各样的软件解决方案有助于推动企业走向成功。这些解决方案是重塑客户关系、优化项目工作流程、革新财务管理实践以及通过沉浸式的培训体验增强员工能力的关键。 采用软件解决方案…

政府部门联合开展智能制造试点示范行动,对企业发展有哪些利好?

智能制造&#xff08;也称为工业 4.0 或工业物联网 (IIoT)&#xff09;的试点示范可以为业务发展带来诸多好处。主要优势体现在&#xff1a; 1.提高效率&#xff1a;智能制造集成了自动化、数据分析、人工智能和机器学习等先进技术。这些技术优化了生产流程&#xff0c;从而提…

Ubuntu 20.04 APT 方式安装 mysql 5.7

Ubuntu 20.04 直接 apt 安装的 mysql 是 8.0 &#xff0c;现在需要安装 5.7 版本&#xff0c;还颇费周章&#xff01;按照文档直接点进去那个 MySQL APT Repository 中&#xff08;https://dev.mysql.com/downloads/repo/apt/&#xff09;只显示了 8.0 &#xff0c;没有其他版本…

ClickHouse(十六):Clickhouse MergeTree系列表引擎 - CollapsingMergeTree

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

风丘科技将亮相 EVM ASIA 2023

风丘科技将首次亮相 EVM ASIA 2023 WINDHILL will debut EVM ASIA 2023 ——可持续移动的未来 —The Future of SUSTAINABLE Mobility EVM ASIA 2023是亚太地区电气化的国际性展会&#xff0c;专注于新能源汽车、充电技术及汽车零件制造等。展会致力于促进包括充电站、交通…

SpringBoot(十)SpringBoot自定义starter

一个月的时间&#xff0c;转眼已经到了我的SpringBoot系列的第十篇文章。还记得我的第二篇文章SpringBoot&#xff08;二&#xff09;starter介绍_springboot的starter_heart荼毒的博客-CSDN博客 曾经介绍过starter。starter除了官方提供的以外&#xff0c;我们也可以自定义。本…