一个数组类:移动零
给定一个数组nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零的相对顺序。
注意:必须在不复制数组的情况下原地对数组进行操作。
示例1:
输入:nums = [0,1,0,3,12]
输出:[1,3,12,0,0]
示例2:
输入:nums = [0]
输出:[0]
方法一:
- 循环解决问题
- 从数组第一个数开始比较,如果是0则为不变,并记录此时0的个数,当数不为0时,将该数字前移i
(i 是该数字前0的个数)
int time = 0;
for (int i = 0; i < nums.length; i++)
{
int current = nums[i];
if (current == 0)
{
time += 1;
continue;
}
nums[i] = nums[i - time];
nums[i - time] = current;
}
方法二:
- 我们换一种思维来看这道题,先将非零的数按照顺序重新排列,最后补零
- 个人也是比较喜欢这种方法
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];
}
}
for(int j=index;j<nums.length;j++){
nums[j]=0;
}
}
}