难度:简单 日期:2022.10.1
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:输入: nums = [0]
输出: [0]
方法:快慢指针
思路与前面两篇大同小异,就不再赘述。但是由于上次观察到使用while的空间效率要比使用for循环的空间效率高,因此这里进行了改良,写了while循环的版本。
代码
class Solution {
public void moveZeroes(int[] nums) {
int slow = 0;
int fast = 0;
while(fast < nums.length ){
if(nums[fast] != 0){
nums[slow++] = nums[fast];
}
fast++;
}
while(slow < nums.length){
nums[slow++] = 0;
}
}
}
结果对比
while版
for循环
注:求大佬解答🙏,连续几个题都有这种情况,想知道为什么,还是说不用太在意这个问题???