LeetCode283.移动0

news2025/1/10 11:20:24

在这里插入图片描述

思路1

分析

在i位置遇到0,把后面的元素向前移动覆盖,然后把最后一个位置赋值为0即可

注意问题:

  • 可能 i 一个位置 移动一次之后还是0,需要循环

  • 有可能 i 位置的0 是因为 已经所有的0都到后面了

    ​ 所以需要用count记录0的个数,当所有0都移动完了就break,否则会死循环

LeetCode283 移动0

代码

void moveZeroes(int* nums, int numsSize){
    //在i位置遇到0
    //把i+1到最后的元素向前移动
    //然后把0放到最后
    //找出0的个数
    int count=0;
    for(int i=0;i<numsSize;i++)
    {
        if(nums[i]==0)
        {
            count++;
        }
    }
    for(int i=0;i<numsSize-1;i++)
    {
        while(nums[i]==0)
        {
            //这里需要让0的数量--
            //如果已经让所有的0全部到最后面了,就不需要移动了
            if(count==0)
            {
                break;
            }
            //移动
            for(int j=i;j<numsSize-1;j++)
            {
                nums[j]=nums[j+1];
            }
            //移动之后把最后一个元素置为0
            nums[numsSize-1]=0;
            count--;
        }
    }
}

思路2(效率高)

双指针法

  1. end去找非0,放到src位置

  2. 最后end走到numsSize,src位置就是最后一个非0的下一个位置

  3. 把src后面的置0

LeetCode283 移动0 双指针法

最后:

image-20220702195150657

代码

void moveZeroes(int* nums, int numsSize){
    //end去找非0,放到src位置
    //最后end走到numsSize,src位置就是最后一个非0的下一个位置
    //把src后面的置0
    int src=0;
    int end=0;
    while(end<numsSize)
    {
        if(nums[end]!=0)
        {
            nums[src]=nums[end];
            ++src;
        }
        ++end;
    }
    //把src后面的置0
    memset(nums+src,0,sizeof(int)*(numsSize-src));
}

不用memset的方法

当end位置为非0的时候

其实可以直接把src位置和end位置的元素进行交换

如图:

可以发现 src和end交换的过程就是一直把0向后换

LeetCode283 移动0 双指针法1

如果 数组没有0

那么src和end一直自己交换,也是正确的!

LeetCode283 移动0 双指针法2

总结:

src和end位置交换

  • 要么就是把0向后换
  • 要么就是自己与自己交换

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

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

相关文章

2022年区块链安全领域8成以上损失集中在DeFi和跨链桥

近期&#xff0c;欧科云链研究院上线《2022年全球区块链生态安全态势报告》&#xff0c;报告指出2022年区块链安全领域8成以上损失集中在DeFi和跨链桥&#xff0c;钓鱼攻击是最常见攻击手法。主要结论 2022年前11个月&#xff0c;OKLink共监测到区块链生态相关安全事件275起&a…

整理leetcode中”最长...“

1.最长公共子序列&#xff08;动态规划&#xff09;剑指offer95 输入&#xff1a;text1 “abcde”, text2 “ace” 输出&#xff1a;3 解释&#xff1a;最长公共子序列是 “ace” &#xff0c;它的长度为 3 。 Q1&#xff1a;为什么想到二维dp&#xff1f; A1&#xff1a;因…

JDBC第二章 (JDBC API详解)

目录 一、下载驱动包 二、加载与注册驱动 1、使用driverManager类 2、方式&#xff1a; 3、补充&#xff1a; 三、建立连接 1、URL 2.建立连接的方式 3.事务管理 4.获取Statement语句 1、普通版本 2、防止SQL注入版本 3、获取存储过程 四、Statement 1、概述 2…

数图互通高校房产管理——房屋模拟分配建设

数图互通房产管理系统在这方面做得比较全面&#xff1b; 1、 房屋模拟分配建设方案 实现对学校房屋分配进行情景模拟&#xff0c;在特定房屋类型、数量、使用面积等情况下&#xff0c;建立多个模拟分配方案&#xff0c;并对每个模拟分配方案生成明细清单。 1.1 房屋模拟分配清…

石墨烯太阳能供暖远程监控

石墨烯太阳能供暖系统是指采用全新一代石墨烯碳纤维电热膜为发热体&#xff0c;直接将电能转换为热能的供暖系统。再搭配太阳能光伏发电系统给石墨烯供暖系统供电&#xff0c;更加节能有效地解决用户用电问题。但目前这种供暖方式也存在诸多问题&#xff0c;如供暖温度得不到控…

深度学习交通标志识别项目

主要内容 在本文中&#xff0c;使用Python编程语言和库Keras和OpenCV建立CNN模型&#xff0c;成功地对交通标志分类器进行分类&#xff0c;准确率达96%。开发了一款交通标志识别应用程序&#xff0c;该应用程序具有图片识别和网络摄像头实时识别两种工作方式。 写作目的 近年…

jenkins 升级遇到问题总结

当我在使用jenkins的时候,避免不了下载很多插件,因为jenkins本身不提供很多功能,大部分的功能都是依赖插件来完成的,这也使jenkins更具有扩展性,但是,我在安装完成后打开插件列表居然是这样的。。。 或者插件列表打开的正常,但是安装某个插件时报这样的错误。。。 看标…

c++算法基础必刷题目——尺取法

文章目录尺取法1、字符串2、丢手绢尺取法 尺取法通常也叫滑动窗口法&#xff0c;顾名思义&#xff0c;像尺子一样取一段&#xff0c;借用挑战书上面的话说&#xff0c;尺取法通常是对数组保存一对下标&#xff0c;即所选取的区间的左右端点&#xff0c;然后根据实际情况不断地推…

Html网页和C++ App通信 - qwebchannel

Qt5 引入了 Qt WebChannel 的概念。这是为了在不能影响各端代码执行的前提下实现 Qt 端于 client 端的无缝 双向 通信。 QWebChannel 提供了在 C应用和 前端&#xff08;HTML/JS&#xff09;之间点对点的通信能力。通过向 前端的 QWebChannel 发布 QObject 的 派生对象&#xf…

开源版支持工作台展示,新增超级管理员用户组,MeterSphere开源持续测试平台v2.5.0发布

2022年12月27日&#xff0c;MeterSphere一站式开源持续测试平台正式发布v2.5.0版本。 在这一版本中&#xff0c;MeterSphere在工作台模块进行了UX交互升级&#xff0c;并将工作台模块由X-Pack增强功能开放为开源版功能。 在测试跟踪模块中&#xff0c;关联测试用例支持关联UI…

(四)RequestResponse

一、Request 和 Response 的概述 Request是请求对象&#xff0c;Response是响应对象。request&#xff1a;获取请求数据 &#xff08;1&#xff09;浏览器会发送HTTP请求到后台服务器 [Tomcat] &#xff08;2&#xff09;HTTP的请求中会包含很多请求数据[请求行请求头请求体] &…

26位前谷歌AI专家出走创业

细数近几年来高科技对现代社会的影响&#xff0c;人工智能&#xff08;AI&#xff09;无疑是排在前列。AI已经对人类社会行为、健康、教育和娱乐的方方面面都产生了巨大冲击。作为高科技的头部企业&#xff0c;谷歌的AI团队可能是AI行业最有影响的团队之一&#xff0c;他们的一…

第十三讲:MSTP技术应用

学校因为教师的人数越来越多&#xff0c;部门逐渐也增多&#xff0c;各部门之间都已经采用了vlan技术&#xff0c;但为了实现公司的稳定性和消除内部网络的环路&#xff0c;管理员小赵配合飞越公司去实现学校内部网络时刻不间断&#xff0c;来保证公司网络的运行。 为了解决校园…

【Lilishop商城】No4-3.业务逻辑的代码开发,涉及到:会员B端第三方登录的开发-微信小程序登录接口开发

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代码…

工厂明火烟雾视频监控识别 烟火自动识别预警 yolo

工厂明火烟雾视频监控识别 烟火自动识别预警通过pythonyolo网络深度学习模型可以自动识别监控区域内的烟火&#xff0c;如pythonyolo网络深度学习模型发现火焰烟火可以立即抓拍告警。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非常流行&#x…

Flink系列-2、Flink架构体系

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址&#xff1a;https://flink.apache.org/ 学习资料&#xff1a;https://flink-learning.org.cn/ 目录Flink中的重要…

[ web基础知识点 ] 解决端口被占用的问题(关闭连接)(杀死进程)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

什么是文件描述符

Linux内核在各种不同的文件系统格式之上做了一个抽象层&#xff0c;使得文件、目录、读写访问等概念成为抽象层的概念&#xff0c;因此各种文件系统看起来用起来都一样&#xff0c;这个抽象层称为虚拟文件系统(VFS&#xff0c;Virtual Filesystem)。 内核数据结构 Linux内核的V…

【endnote学习】解决为什么文献引用后出现年/月/日格式(endnote对其他类型引用文件的不兼容导致)

为什么文献引用后出现年/月/日格式问题描述问题解决问题描述 在一次文献引用中发现&#xff0c;引用后的文献格式里面多了年/月/日格式&#xff0c;比如选择AIChE格式时&#xff0c;出现&#xff1a; Liu P, Nrskov JK. Kinetics of the Anode Processes in PEM Fuel Cells …

编译原理——基本块、流图、基本块优化、循环优化(代码优化)

一、划分基本块、画流图 找基本块的入口&#xff1a;一共有三类入口&#xff1a;①代码段的第一个指令&#xff1b;②条件跳转和无条件跳转的目标语句&#xff1b;③条件跳转语句的下一条语句&#xff1b;根据划分的入口画流图&#xff0c;一个基本块的区间&#xff1a;从入口…