当前位置:网站首页>LeetCode·283.移除零·双指针

LeetCode·283.移除零·双指针

2022-08-10 18:29:00 小迅想变强

链接:https://leetcode.cn/problems/move-zeroes/solution/by-xun-ge-v-6eoq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 

题目

 

示例

 

思路

解题思路
双指针

移动数组中 0 元素,题目给定数组为指针,说明nums指向原始数组的地址,我们修改nums相当于修改了nums指向的地址,所以返回修改之后nums长度即可

对于本题我们定义两个指针,一个指向数组,遍历数组所有元素,当数组元素等于0时,另外一个指针将当前位置之后的所有元素都向前移位,相当于删除操作,最后将后序0补上

双指针优化

在上述解法中,我们需要遍历还需要搬运元素,时间复杂度为O(n^2),我们可以将遍历和搬运简化到一个循环中,定义双指针,当数组元素相同时,慢指针留着当前位置,快指针进行前进,直到不相等时,将快指针指向位置搬运到当前慢指针位置,最后将后序0补上

代码

void moveZeroes(int* nums, int numsSize){
    int i, j;
    for(i = 0, j = 0; i < numsSize; i++)//遍历数组
    {
        if(nums[i] == 0)//为0情况
        {
            continue;
        }
        nums[j++] = nums[i];
    }
    while(j < numsSize)//补上0
    {
        nums[j++] = 0;
    }
    return;
}

作者:xun-ge-v
链接:https://leetcode.cn/problems/move-zeroes/solution/by-xun-ge-v-6eoq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原网站

版权声明
本文为[小迅想变强]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_64560763/article/details/126264224