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