移动零

移动零

1、题目描述

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

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

2、解答思路

已知数组后端若干元素为0,因此只需遍历查询到非零元素并依次赋值到数组前端(无需交换),最后将后端的值均设置为0即可。

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        // 用于记录非零元素的下标
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
			if(nums[i]!=0) {
                // 将非零元素依次赋值给nums[index],因此相对顺序也不会变
				nums[index++] = nums[i];
			}
		}
        // 从最后一个非零元素到末尾,均赋值为0
        for (int i = index; i < nums.length; i++) {
			nums[i] = 0;
		}
    }
}
  • 本题关键点在于下标 i 和 index 的变化,i 用于遍历整个数组,index 用于存储非零元素。
  • 时间复杂度:o(n)。主要时间花销是for循环遍历整个数组。
相关推荐
Leinwin2 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
无极低码2 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
薛定谔的悦2 小时前
MQTT通信协议业务层实现的完整开发流程
java·后端·mqtt·struts
软件算法开发3 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
enjoy嚣士3 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
罗超驿3 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
superior tigre3 小时前
22 括号生成
算法·深度优先
盐水冰4 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
凸头4 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun3141594 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm