Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.
给定一个数组nums,编写一个函数,在保持非零元素的相对顺序的同时,将所有的0移动到它的末尾。
For example, given nums
= [0, 1, 0, 3, 12]
, after calling your function, nums
should
be [1, 3, 12, 0, 0]
解题思路:本道题在最初求解时,没有理解题意,直接排序,然后将零移动到后面,但是是不可能通过的。
仔细考虑后,觉得可以使用快慢指针(严格说也不是):i指针从头开始,找到第一个零值,然后j在i的位置上,依次向后移,直到找到第一个非零值,之后交换即可。
详细代码如下:
public class Solution
{
//应用快慢指针
int temp;
int j;
public void moveZeroes(int[] nums)
{
for(int i=0;i<nums.length-1;i++)
{
if(nums[i]==0)
{
j=i;
while(nums[j]==0&&j<nums.length-1)
{
j++;
}
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
}