首先不能复制,只能在原数组是哪个操作,那么很多集合的方式就不行了。当然在现实开发中肯定是可以的。目前按照题目来说是不可以的。所以我们可以思考下,是否可以通过交换来实现。
- 初始化一个变量
to
为 0。这个变量的目的是跟踪非零元素应该放置的位置。 - 遍历数组
nums
。对于数组中的每一个元素:- 如果当前元素
nums[i]
不是0,那么调用swap
方法,将该元素与位置to
的元素交换,并将to
加1。这样,所有非零元素都会被移动到数组的前面,并保持它们的相对顺序。
- 如果当前元素
- 遍历结束后,所有非零元素都被移动到了数组的前面,而零元素则自然地被移动到了数组的末尾。
public static void moveZeroes(int[] nums) {
int to = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
swap(nums, to++, i);
}
}
}
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}