算法-双指针-简单-移动零

记录一下算法题的学习2

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

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

示例 1:

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

示例 2:

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

分析思考:

什么是双指针?

双指针即用两个不同速度不同方向的指针对数组或对象进行访问,通过两个不同指针的碰撞从而达到特定的目的。

左右指针通常在数组有序的情况下,从最小和最大端同时对数组进行处理,对满足特定条件的数组元素进行成对处理,而快慢指针逐渐靠拢直至发生碰撞,则遍历完所有数组

我们在这里使用左右指针

初级代码展示

class Solution {
    public void moveZeroes(int[] nums) {
      int i=0;
      int j=0;
      //判断该数组是否为空或者只有一个值,就不需要排序
      if(nums==null||nums.length<=1){
          System.out.println("数组为空或数组只有一个值,不需要移动顺序");
      }
      //第一次遍历,j指针记录非0的个数,只要是非0的都赋给nums[j],这里nums[j++]实际上最开始就是nums[0],而不是nums[1];
      for(i=0;i<nums.length;i++){
          if(nums[i]!=0){
              nums[j++]=nums[i];
          }
      }
     //第二次遍历,由于非0元素都统计完了,剩下都是零,第二次遍历把末尾元素都赋值0
      for(i=j;i<nums.length;++i){
        nums[i]=0;
              }
     //第三次遍历,把得到的移动零的正确数组遍历出来
      for(j=0;j<nums.length;j++){
          System.out.println(nums[j] );
      }
    }
}

上一个代码,经过多次遍历,时间过慢,(太搞笑了!)

我们进阶代码展示

class Solution {
    public void moveZeroes(int[] nums) {
     int index=0,temp=0;
     for(int i=0;i<nums.length;i++ ){
         if(nums[i]!=0){
             temp=nums[i];
             nums[i]=nums[index];
             nums[index]=temp;
             index++;
         }
     }
     return;
    }
}

仔细分析:

右指针遍历出每一个 !=0 的数,与左指针(从下标 0 开始)交换,每交换一次就要左指针 ++ 

 举例展示nums=[0,1,0,3,12]

nums值010312
索引01234

当遍历出第一个!=0的数时,与左指针(从下标 0 开始)交换,结果展示

nums值100312
索引01234

 当遍历出第二个!=0的数时,与左指针下标 1 交换,结果展示

nums值130012
索引01234

 当遍历出第三个!=0的数时,与左指针下标 2 交换,结果展示

nums值131200
索引01234

直至整个遍历完为止。 

结语:

还可以查看

移动零算法_冰鲜柠檬汁的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

solidworks怎么识别STEP文件特征?

solidworks怎么识别stp文件特征&#xff1f; Chapter1 solidworks怎么识别STEP文件特征&#xff1f; Chapter1 solidworks怎么识别STEP文件特征&#xff1f; 原文连接&#xff1a;https://baijiahao.baidu.com/s?id1744633829345140540&wfrspider&forpc step或者stp…

第八章:枚举

系列文章目录 文章目录 系列文章目录前言一、枚举总结 前言 类可以作为常量使用。 一、枚举 枚举是一组常量的集合。可以这里理解&#xff1a; 枚举属于一种特殊的类&#xff0c; 里面只包含一组有限的特定的对象。 枚举的实现方式自定义类实现枚举使用 enum 关键字实现枚举…

springBoot 入门一 :创建springBoot项目

创建springBoot项目 配置maven 项目报错处理

水库大坝安全监测预警系统的重要作用

水库大坝建造在地质构造复杂、岩土特性不均匀的地基上&#xff0c;在各种荷载的作用和自然因素的影响下&#xff0c;其工作性态和安全状况随时都在变化。如果出现异常&#xff0c;又不被及时发现&#xff0c;其后果不堪设想。全天候实时监测&#xff0c;实时掌握水库水位、雨情…

python链表_递归求和_递归求最大小值

创建一个单链表&#xff1a; class LinkNode: #设置属性def __init__(self,data None):self.data dataself.next None class LinkList: #设置头结点def __init__(self):self.head LinkNode()self.head.next Nonedef CreateListR(self,a): …

概率论和数理统计(四)方差分析与回归分析

前言 实际场景中,也需要研究两个变量的关系.检验也可能出现两个以上的总体. 方差分析 假设检验中&#xff0c;若需检验 H 0 : μ 1 μ 2 &#xff0c; H 1 : μ 1 ̸ μ 2 H_0:μ_1μ_2&#xff0c;H_1:μ_1 \notμ_2 H0​:μ1​μ2​&#xff0c;H1​:μ1​μ2​&#x…

【问题思考总结】第一型曲线积分和第二型曲线积分的区别与联系【从几何知识的角度思考】

此处为曲面积分------>第一型曲面积分的第二型曲面积分的区别与联系【从几何知识的角度思考】 问题 在做题的时候&#xff0c;我发现&#xff0c;关于这方面的知识有很多很多&#xff0c;但是每道题的解法不尽相似&#xff0c;也没有什么具体的体系&#xff0c;尤其是在结…

香港:考虑将虚拟资产列为投资移民资产

11 月 13日消息&#xff0c;香港政府在重新启动投资移民计划后&#xff0c;正考虑将持牌虚拟资产交易平台的比特币等虚拟资产列为可接受的投资项目。这一措施旨在折大投资移民的资产范围&#xff0c;以吸引更多高净值人士在香港落户。尽管有声音呼吁将房地产投资纳入资格范围&a…

LMI相机配置步骤,使用Gocator2550相机

在此之前可以先浏览我编写的相机SDK通用类和LMISDK&#xff0c;进行配套观看 https://blog.csdn.net/m0_51559565/article/details/134404394 //LMI相机SDK https://blog.csdn.net/m0_51559565/article/details/134403745 //相机通用类1.启动LMI加速器 LMI加速器用于将相机…

微信公众号会员系统怎么做

一、引言 在这个信息爆炸的时代&#xff0c;微信公众号已经成为了企业和个人品牌的重要宣传阵地。而在公众号运营过程中&#xff0c;会员系统是非常重要的一环。通过建立会员系统&#xff0c;你可以更好地管理粉丝、提升用户黏性&#xff0c;让你的品牌更加强大。本文将为你详…

光纤接入网是怎么操作

大家还记得我们通过运营商提供的网线甚至是电话线上网的经历吧&#xff0c;那时上网使用xDSL&#xff08;数字用户线路&#xff0c;Digital Subscriber Line&#xff09;网络技术&#xff0c;xDSL技术是数字用户线路的所有类型的总称&#xff0c;包括RADSL、SDSL、HDSL、ADSL、…

太好玩了,爬虫、部署API、加小程序,一条龙玩转知乎热榜

一直想做一个从爬虫到数据处理&#xff0c;到API部署&#xff0c;再到小程序展示的一条龙项目&#xff0c;最近抽了些时间&#xff0c;实现了一个关于知乎热榜的&#xff0c;今天就来分享一下&#xff01; 由于代码还没有完全整理好&#xff0c;今天只给出一个大致的思路和部分…

uniapp生成自定义(分享)图片并保存到相册

需求描述 在一个页面中底部有个保存图片的功能&#xff0c;点击能够保存一张生成的自定义表格图片。 第一眼见到这个需求 自己会出现了两个问题 如何去处理图片中的自定义内容以及样式如何将自定义内容转化成图片 至于保存图片&#xff0c;uniapp有对应的api去实现uni.saveIma…

【广州华锐互动】AR技术为气象站远程监控及在线指导维修提供极大便利

随着科技的不断发展&#xff0c;人类对于自然环境的理解和掌控能力也在不断提升。其中&#xff0c;AR&#xff08;增强现实&#xff09;技术的应用&#xff0c;为气象监控带来了革命性的变化。AR远程气象监测&#xff0c;就是将AR技术与气象监控相结合&#xff0c;通过虚拟与现…

Centos7 单用户模式修改密码 3步搞定 666 (百分比成功)

1.第一步重新服务器 2.进入这个页面按e进入单用户模式 3.找到linux16这行 在后面添加 init/bin/bash 按ctrlx进入 4.注意是事项直接修改是报错passud: Authentication token manipulation error 需要执行权限&#xff1a;mount -o remount,rw /

Scala---数据基础

一、数据类型 二、变量和常量的声明 定义变量或者常量的时候&#xff0c;也可以写上返回的类型&#xff0c;一般省略&#xff0c;如&#xff1a;val a:Int 10常量不可再赋值 1./** 2. * 定义变量和常量 3. * 变量 :用 var 定义 &#xff0c;可修改 4. * 常量 :用 val 定…

最快最便捷的pytest使用allure测试报告

一、前言 最近通过群友了解到了allure这个报告&#xff0c;开始还不以为然&#xff0c;但还是逃不过真香定律。 经过试用之后&#xff0c;发现这个报告真的很好&#xff0c;很适合自动化测试结果的展示。下面说说我的探索历程吧。 选用的项目为Selenium自动化测试Pytest框架实…

IP地址查询在社交行业中的崭新应用

在社交媒体蓬勃发展的今天&#xff0c;IP地址查询技术IP66_ip归属地在线查询_免费ip查询_ip精准定位平台正在成为社交行业中的一项强大工具。这项技术不仅为社交平台提供了更多个性化服务的可能&#xff0c;还在用户安全和内容管理等方面发挥了关键作用。本文将深入探讨IP地址查…

代码随想录算法训练营第21天|530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

JAVA代码编写 530.二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1…

使用Halcon的HsmartWindows窗体控件显示3D模型

在此之前可以先浏览我的LMI&#xff08;3D&#xff09;SDK配合学习 https://blog.csdn.net/m0_51559565/article/details/134419165 //配置LMI相机 https://blog.csdn.net/m0_51559565/article/details/134404394 //LMI相机SDK https://www.51halcon.com/forum.php?modviewthr…