1

数组作为一种简单直观的数据结构,当需要对其操作时,使用双指针有时可以带来出奇的效果。

问题:给定一个数组,将所有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覆盖。


fat_tiger
7 声望0 粉丝

« 上一篇
【2】链表