移动零--快慢指针算法

image.png

一道简单的原地题目,指直接在给定的数组上修改数值求解,不要复制到新的数组。

  • 思路:解题思路
    定义一个慢指针slow,初始化为0,表示非零元素的位置。
    定义一个快指针fast,初始化为0,表示遍历数组的位置。
    使用一个循环,从头到尾遍历数组nums。
    在循环中,如果快指针指向的元素不等于0,就将它赋值给慢指针指向的位置,然后将慢指针向后移动一位。
    在循环结束后,将慢指针后面的所有元素都置为0。
class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        # dual p
        sp=0
        fp=0
        l=len(nums)
        # n=0
        # for i in range(len(nums)):
        while fp<l:
#注意下面两个while也要判断fp是否小于l, 否则会产生数组越界的问题
            while fp<l and nums[fp]==0:
                fp+=1
                # n+=1
            while fp<l and nums[fp]!=0:
                nums[sp]=nums[fp]
                sp+=1
                fp+=1
        while sp<l:
            nums[sp]=0
            sp+=1
        return nums
image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容