题目要求如下:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:
必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。
要完成操作不难,若单纯采用判断是否为0,然后一个个移动数组元素,其时间复杂度肯定不是线性的,提交结果也会超时,所以我们应该尽可能减少操作次数。
在这里给出如下方法:
1.统计数组中0的个数
2.创建另一个数组,把原数组保存在该数组中
3.将元素组中的0去掉:即用备用数组作为判断体,如果为不为零,就让原数组元素的值等于备用数组(这里要创建两个变量来充当两个数组的下标)
4.最后在原数组尾巴填上已知个数的0即可
源代码如下:
class Solution {
public void moveZeroes(int[] nums) {
int count=0;
for(int i=0;i<nums.length;i++){
if(nums[i]==0){
count++;
}
}
for(int j=0,m=0;j<nums.length-count&&m<nums.length;m++){
if(nums[m]!=0){
nums[j]=nums[m];
j++;
}
}
for(int k=nums.length-count;k<nums.length;k++){
nums[k]=0;
}
}
}
运行结果:
|