数组作为一种简略直观的数据结构,当须要对其操作时,应用双指针有时能够带来出奇的成果。
问题:给定一个数组,将所有 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 笼罩。