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

LeetCode-283. 移动零(Java)

283. 移动零

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 1e4
  • -2e31 <= nums[i] <= 2e31 - 1

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

首先想到复制数组 :

class Solution {public void moveZeroes(int[] nums) {int[] ans=new int[nums.length];int k=0;for(int i=0;i<nums.length;i++){if(nums[i]!=0) {ans[k]=nums[i];k++;}}for(int i=k;i<nums.length;i++){ans[i]=0;}for(int i=0;i<nums.length;i++){nums[i]=ans[i];}}
}

但是题目要求不能复制数组,那就直接双指针,一个用来维护不为0的元素存到哪了,每次有不为0的元素就把右指针的值拿过来,然后右指针处值置为0,左指针 ++即可,但是得注意左右指针相等得情况。

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

http://www.dtcms.com/a/278572.html

相关文章:

  • 【STM32】什么在使能寄存器或外设之前必须先打开时钟?
  • Pandas-特征工程详解
  • 零基础入门Java虚拟机与单例模式:新手友好教程
  • Modbus 开发工具实战:ModScan32 与 Wireshark 抓包分析(二)
  • VSCODE 选中多行 需要同时按住alt键才可以
  • ShenYu实战、问题记录
  • 记字节前端面试一道简单的算法题
  • 注解@Autowired和@Resource的区别
  • CentOS7 OpenSSL升级1.1.1t;OpenSSH 升级 9.8p1 保姆级教程
  • jenkins 流水线比较简单直观的
  • 《每日AI-人工智能-编程日报》--2025年7月14日
  • Spring Boot - Spring Boot 集成 MyBatis 分页实现 PageHelper
  • 17.Python 中的相等性比较:== vs is
  • 具身智能零碎知识点(五):VAE中对使用KL散度的理解
  • 【Java EE初阶 --- 网络原理】初识网络
  • flink 和 spark 架构的对比
  • 如何在 Java 中使用 Redis 实现缓存优化?
  • 4G模块 A7670发送英文短信到手机
  • 11.设置 Python 3 和 pip 3 为默认版本
  • Google的Mediapipe开源框架介绍及使用说明
  • 基于浅切多道的晶圆切割 TTV 均匀性控制与应力释放技术
  • python学智能算法(十八)|SVM基础概念-向量点积
  • CentOS 安装jenkins笔记
  • windows在anaconda中下载安装fasttext
  • jenkins搭建笔记
  • .gitignore文件中的各种写法详解
  • JMeter 连接与配置 ClickHouse 数据库
  • JavaScript 高级封装方法指南
  • 将CSDN文章导出为PDF
  • RabbitMQ的介绍与安装