📅  最后修改于: 2023-12-03 15:16:37.838000             🧑  作者: Mango
本文将介绍如何使用单次遍历的方式将一个整数数组中所有的零移到数组的末尾。
给定一个整数数组nums,编写一个Java程序将所有的零移动到数组的末尾,保持非零元素的相对顺序。
例如,给定数组[0,1,0,3,12]
,程序应该返回[1,3,12,0,0]
。
本文使用单次遍历的方式解决该问题,可以避免使用额外的数组空间。
具体过程如下:
nonZeroIndex
记录当前非零元素应该存放的下标,初始值为0;nonZeroIndex
所记录的位置,然后将nonZeroIndex
加1;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为数组的大小。