关于c:双指针在数组操作中的应用

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

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理