文章目录
- 1、题目描述
-
- [1.1 移动所有零至数组末尾](#1.1 移动所有零至数组末尾)
- [1.2 示例](#1.2 示例)
- 2、解题思路
-
- [2.1 思路讲解](#2.1 思路讲解)
- [2.2 动画演示( 待补充)](#2.2 动画演示( 待补充))
- [2.3 复杂度分析](#2.3 复杂度分析)
- 3、答案
-
- [3.1 Java 代码](#3.1 Java 代码)
- [3.2 运行结果](#3.2 运行结果)
- [4、视频讲解( 待补充)](#4、视频讲解( 待补充))
1、题目描述
1.1 移动所有零至数组末尾
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
1.2 示例
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
2、解题思路
2.1 思路讲解
- 用
index
变量来记录当前处理到了第几个数字 - 如果当前数值是 0,进入空循环,不做任何处理
- 每次处理完一个数字,index +1
- 末尾补零
- 注意题目中要求不能拷贝数组
2.2 动画演示( 待补充)
2.3 复杂度分析
-
时间复杂度 : O ( n ) O(n) O(n)
-
空间复杂度 : O ( 1 ) O(1) O(1)
3、答案
3.1 Java 代码
java
public class _03_移动零 {
public static void main(String[] args) {
System.out.println(Arrays.toString(moveZeroes(new int[]{0, 1, 0, 3, 12})));
System.out.println(Arrays.toString(moveZeroes(new int[]{0})));
}
private static int[] moveZeroes(int[] nums) {
int index = 0; //用来记录当前处理到了第几个数字
for (int i = 0; i < nums.length; i++) {
// 如果当前数值是 0,进入空循环,不做任何处理
if (nums[i] != 0) {
nums[index] = nums[i];
index++; //每次处理完一个数字,index +1
}
}
for (int i = index; i < nums.length; i++) {
nums[i] = 0;
}
return nums;
}
}