数组作为一种简略直观的数据结构,当须要对其操作时,应用双指针有时能够带来出奇的成果。

问题:给定一个数组,将所有0挪动到数组的尾部,同时放弃非零元素的绝对程序。
【0,1,0,3,12】
挪动完当前为->[1,3,12,0,0]

应用双指针,一个快指针遍历数组,一个慢指针用来存储非零数据。

void moveZeroes(int* nums, int numsSize){    int fast = 0, slow = 0;    while (fast < numsSize)    {        if (nums[fast] != 0)        {            nums[slow] = nums[fast];            if (fast > slow)                nums[fast] = 0;            slow++;        }        fast++;    }}

将非零数据,存入数组的前段,赋值操作结束当前nums[fast]曾经没有用途了将其置0,须要留神的是slow等于fast的状况,防止将slow笼罩。