问题链接
问题描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
- 请注意 ,必须在不复制数组的情况下原地对数组进行操作。
- 1 <= nums.length <= 104
- -231 <= nums[i] <= 231 - 1
示例
实例1
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
实例2
输入: nums = [0]
输出: [0]
解题思路
核心:双指针
- 如果不限制“原地对数组进行操作”的话,我们可以创建一个数组,遍历原数组,如果不为0,放入到新数组中。
- 我们可以基于限制条件进行优化,直接使用原数组,遍历原数组,将找到的第0个不为0的数放到数组的第0位,将找到的第1个不为0的数放到数组的第1位......
- 大概就是这个意思,当然,在换位置的时候,还要将这个数原来的位置变成0;
其中还要注意:[1,2,3,0,4],前面几个数其实位置没有发生变化,不需要置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[i];
if (index != i) {
nums[i] = 0;
}
index++;
}
}
}
}
执行结果
网友评论