双指针——移动零

news2024/11/17 15:33:55

一,题目要求:

  • 给定一个数组 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

二 ,算法原理

  • 定义两个指针
    • cur从左向右扫描数组,遍历数组
    • dest指向处理区间内,非0元素的最后一个元素
  • 将数组分成三个部分:
    • 【0,dest】:非0元素
    • 【dest+1,cur-1】:0元素
    • 【cur,n-1】:待处理

在这里插入图片描述

  • cur从左向右遍历:保持这三部分的状态不变,当遍历结束时,即完成非0元素与0元素的划分。

    • cur 遇到0元素:
      cur ++
    • cur 遇到非0元素:
      非0元素部分长度+1,并把cur当前所指的这个非0元素添加到这个新增的这个位置,即swap(dest+1,cur)。
      在这里插入图片描述

三 ,代码实现

public void moveZeroes(int[] nums) {

	// 遍历之前,非0元素部分长度为0,所以dest = -1

	for(int cur = 0,dest = -1;cur < nums.length;cur ++) {
	
		if(nums[nums] != 0) {
			dest ++;      // 非0元素部分长度+1

			// 交换新增位置处的0 和 cur当前指向的值
			int tmp = nums[cur];
			nums[cur] = nums[dest];
			nums[dest] = tmp;
		}
	}
}

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

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

相关文章

零代码编程:用ChatGPT下载lexfridman的所有播客音频和文本

莱克斯弗里德曼&#xff08;Lex Fridman&#xff09;&#xff0c;男&#xff0c;麻省理工学院&#xff08;MIT&#xff09;研究科学家兼播客节目主持人&#xff0c;是一位俄罗斯裔美国计算机科学家。2014年&#xff0c;弗里德曼加入谷歌&#xff0c;但在6个月后离开了公司。201…

苹果电脑如何修改文件创建时间

如果您想修改 Mac 上的文件创建时间&#xff0c;可以采用几种不同的方法。您可以使用 Finder 修改文件创建时间&#xff0c;也可以使用终端修改文件创建时间。当然&#xff0c;您还可以使用第三方应用软件进行修改文件创建时间。 小编比较懒&#xff0c;不喜欢太麻烦的操作&am…

苹果手机怎么隐藏照片?(详细图文教程)

我们的手机相册中可能会保存一些与个人隐私相关的照片&#xff0c;比如&#xff1a;银行卡、身份证、护照等私人信息。这些照片如果不进行加密处理的话&#xff0c;会很容易泄露出去。 在别人使用您的手机时&#xff0c;如果您不想这些隐私照片被人看到该怎么办呢&#xff1f;…

Java基础练习(矩阵的加减乘除运算)

简介 对于有了解&#xff0c;但是了解不深的同学&#xff0c;学习Java总是感觉一看就会&#xff0c;一些就废。往往需要一些实操练习&#xff0c;来夯实我们的学习结果。九九乘法表和计算器都是在编程学习领域比较经典的案例。本文为大家讲解一下两个基础实操&#xff0c;熟悉一…

在线JSON转EXCEL工具

全天下的柔情共十分&#xff0c;你占八分。你喊我名字那晚的凉风秋月算一分&#xff0c;其余所有占一分。 推荐 在线JSON转Excel工具 - WeJSON 工具简介 在线JSON转Excel工具&#xff0c;可以快速将JSON数组数据一键转换为Excel格式&#xff0c;方便数据的可视化和交流。 所…

基于Qt设计的邮件收发管理系统(垃圾邮件识别)

基于Qt设计的邮件收发管理系统(垃圾邮件识别) 一、项目背景 随着互联网的发展,邮件成为人们沟通交流不可或缺的一部分。然而,随之而来的是大量的垃圾邮件和欺诈邮件,给人们的生活造成了很大的困扰和威胁。为了解决这个问题,本文提出了一种基于Qt设计的朴素贝叶斯算法邮件收…

SSL证书品牌 Positive

Positive品牌的SSL证书具有以下优势&#xff1a; 1. 安全性&#xff1a;Positive SSL证书提供强大的加密算法&#xff0c;确保通过网站传输的数据得到保护&#xff0c;防止被未经授权的第三方窃取或篡改。 2. 可信度&#xff1a;Positive SSL证书由全球知名的认证机构颁发&am…

AIGC|一文揭秘如何利用MYSCALE实现高效图像搜索?

图像搜索已成为一种流行且功能强大的能力&#xff0c;使用户能够通过匹配功能或视觉内容来查找相似的图像。随着计算机视觉和深度学习的快速发展&#xff0c;这种能力得到了极大的增强。 本文主要介绍如何基于矢量数据库MYSCALE来实现图像搜索功能。 一、MySCALE简介 MyScale 是…

win10下yolov6 tensorrt模型部署

TensorRT系列之 Win10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署…

uniapp\ taro 如何使用 UnoCSS 原子化css

unocss-preset-weapp 相较于 tailwindcss 和 windicss, unocss的性能和可扩展性都优于它们 UnoCSS小程序预设 unocss-preset-weapp 内置 transformer 用于兼容小程序 transformerClass 转换转义类名&#xff0c;解决小程序不支持\\&#xff0c;\:&#xff0c;\[&#xff0c;…

瞬态抑制二极管TVS的工作原理?|深圳比创达电子EMC(下)

TVS二极管与Zener二极管同样作为过压保护&#xff0c; TVS着重浪涌电压的钳位保护&#xff0c;具有抗大电流冲击的能力;Zener管着重于稳压效果&#xff0c;具有浪涌电流小&#xff0c;保护电压稳的特点&#xff0c;两者在原理与保护特性有所区别&#xff0c;同时在个别应用领域…

回收站删除的文件怎么恢复?快来学习这3个方法!

“有时候我会先将一些不重要的文件放入回收站中&#xff0c;等需要用到时再将它还原。但是我刚刚不小心把回收站清空了&#xff0c;还有方法可以帮我找回我的数据吗&#xff1f;” 在使用电脑时&#xff0c;如果我们删除文件&#xff0c;这些文件会被先收入回收站中。如果我们是…

MODBUS-TCP转MODBUS-RTU通信应用(S7-1200和串口服务器通信)

在学习本博客之前,大家需要熟悉MODBUS-TCP和MODBUS-RTU通信,这2个通信的编程应用,大家可以查看下面文章链接: MODBUS-RTU通信 MODBUS-RTU通信协议功能码+数据帧解读(博途PLC梯形图代码)-CSDN博客MODBUS通信详细代码编写,请查看下面相关链接,这篇博客主要和大家介绍MODB…

商用工程运输车辆智能交通精细数字化管理中的大数据应用

在物联网蓬勃发展的今天&#xff0c;智能交通、智能工业控制、远程控制汽车基本不是什么难题&#xff0c;在集团、企业、都会涉及用车及安全管理&#xff0c;就拿车队管理系统来说&#xff0c;它的主要作用是进行车辆定位、机械诊断、驾驶员行为监测等&#xff0c;并能及时发现…

ubuntu18.04 RTX3060 rangnet++训练 bonnetal语义分割

代码链接&#xff1a; https://github.com/PRBonn/lidar-bonnetal 安装anaconda环境为 CUDA 11.0&#xff08;11.1也可以&#xff09; anaconda环境如下 numpy1.17.2 torchvision0.2.2 matplotlib2.2.3 tensorflow1.13.1 scipy0.19.1 pytorch1.7.1 vispy0.5.3 opencv_python…

工业高频读写器和超高频读写器怎么选?

在工业领域中&#xff0c;RFID技术是常用的信息采集和传输的方式之一&#xff0c;RFID根据频段还可以分为低频、高频和超高频等&#xff0c;在选择具体的频段应用时&#xff0c;很多企业却毫无头绪。接下来本文就高频RFID和超高频RFID读写器的特点进行分析&#xff0c;帮助企业…

Python综合练习题

题目 创建一个系统&#xff0c;里面可以添加学生、添加班级、查看班级里的学生&#xff0c;在控制台输出 效果图 关键代码 完整代码 # -*- coding: UTF-8 -*-#功能 Functionality0 #学生 Student [刘榕榕0, 秦英姿1, 王家乐0, 孟德赫3, 门子伟4, 明展宇5] #班级 Class [大…

景联文数据标注平台助力标注效率翻倍,年处理图像数据过亿

图像标注是指为图像添加文字描述或标签&#xff0c;包括物体、场景、情感、活动等多种内容&#xff0c;以帮助计算机更好地理解和处理图像信息的过程&#xff0c;提高图像处理的自动化程度和准确性&#xff0c;常用于计算机视觉、图像识别等领域。 选择图像标注工具时&#xff…

思必驰:离线语音识别芯片简介

一&#xff0e;使用场景 夏天某个凉爽的早晨&#xff0c;当你躺在床上玩着手机&#xff0c;突然一阵困意袭来&#xff0c;原来已经中午了&#xff0c;此时你一个侧身准备休息&#xff0c;突然发现一阵酷热袭来&#xff0c;你定睛一看&#xff0c;原来是风扇没有打开&#xff0c…

工业以太网RFID设备有哪些部分组成?

随着近年来物联网不断发展&#xff0c;RFID技术已经逐渐成为物联网中的关键技术&#xff0c;利用RFID技术可以实现实时数据采集、物流自动化、远程设备管理等功能&#xff0c;大大提高了物联网提取数据和物体识别能力的智能化水平。 工业RFID读写器作为数据采集最关键的一个设备…