📌  相关文章
📜  Java程序将所有零移动到数组末尾| Set-2(使用单次遍历)(1)

📅  最后修改于: 2023-12-03 15:16:37.838000             🧑  作者: Mango

Java程序将所有零移动到数组末尾| Set-2(使用单次遍历)

本文将介绍如何使用单次遍历的方式将一个整数数组中所有的零移到数组的末尾。

问题描述

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

例如,给定数组[0,1,0,3,12],程序应该返回[1,3,12,0,0]

解决方案
算法

本文使用单次遍历的方式解决该问题,可以避免使用额外的数组空间。

具体过程如下:

  1. 用一个变量nonZeroIndex记录当前非零元素应该存放的下标,初始值为0;
  2. 遍历整个数组,当遇到非零元素时将其放入数组中nonZeroIndex所记录的位置,然后将nonZeroIndex加1;
  3. 遍历结束后,将从nonZeroIndex开始的所有元素赋值为0,即为所有零值元素。

算法的时间复杂度为O(n),其中n为数组的大小。

代码实现

代码实现如下:

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

在上述程序中,我们使用了两个for循环。第一个循环遍历整个数组,将非零元素依次放入数组中。第二个循环从nonZeroIndex开始,将接下来的所有元素赋值为0,即为所有的零值元素。

总结

本文介绍了如何使用单次遍历的方式将一个整数数组中所有的零移动到数组的末尾。算法的时间复杂度为O(n),其中n为数组的大小。