数组作为一种简单直观的数据结构,当需要对其操作时,使用双指针有时可以带来出奇的效果。
问题:给定一个数组,将所有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覆盖。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。