移动零

移动零

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循环遍历整个数组。
相关推荐
papership13 小时前
【入门级-算法-5、数值处理算法:高精度的乘法】
数据结构·算法
earthzhang202113 小时前
【1039】判断数正负
开发语言·数据结构·c++·算法·青少年编程
谈笑也风生13 小时前
只出现一次的数字 II(一)
数据结构·算法·leetcode
蕓晨13 小时前
auto 自动类型推导以及注意事项
开发语言·c++·算法
一袋米扛几楼9813 小时前
【软件安全】C语言特性 (C Language Characteristics)
java·c语言·安全
mjhcsp13 小时前
C++ 递推与递归:两种算法思想的深度解析与实战
开发语言·c++·算法
_OP_CHEN13 小时前
算法基础篇:(三)基础算法之枚举:暴力美学的艺术,从穷举到高效优化
c++·算法·枚举·算法竞赛·acm竞赛·二进制枚举·普通枚举
m0_7482480214 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
java·开发语言·c++·算法
天选之女wow14 小时前
【代码随想录算法训练营——Day61】图论——97.小明逛公园、127.骑士的攻击
算法·图论
aloha_78914 小时前
测试开发工程师面经准备(sxf)
java·python·leetcode·压力测试