解题思路
方法一:利用两个循环实现。首先创建一个计数器并置零用于统计非零元素的个数,在遍历整个数组的过程中,遇到非零元素时,便把该非零元素赋值给nums[count++],count的值从零开始一直到非零元素的个数,便实现了数组前面全是相对位置不变的非零元素的值,再利用一个循环将数组剩下位置补零即可。
public static void moveZeros(int nums[])
{
if(nums==null)
return;
int count=0;
for(int i=0;i<nums.length;i++)
{
if(nums[i]!=0)
{
nums[count++]=nums[i];
}
}
for(int i=count;i<nums.length;i++)
{
nums[i]=0;
}
}
方法二:用一个循环完成。利用快速排序的思路,在这里0即为基准点,我们尝试将不等于0的元素放在0的左边,等于0的元素放在0的右边,用两个指针来操作。
public static void moveZeros(int nums[])
{
if(nums==null)
return;
int j=0;
for(int i=0;i<nums.length;i++)
{
if(nums[i]!=0)
{
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
j++;
}
}
}