daily_leetcode_2020_1119_283_移动零


1 题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

2 代码

这题考的就是个双指针

2.1 双指针

        j = 0
        """ i指向不为0的元素, j指向不为0元素可以放的位置,遍历过程种,遇见不为0的元素就往前放"""
        for i in range(len(nums)):
            if nums[i]:
                if i > j:
                    nums[j] = nums[i]
                    nums[i] = 0
                j += 1
        print(nums)

2.2 两次遍历

        j, nums_len = 0, len(nums)
        """ 遇见不为0的放前面 """
        for i in range(nums_len):
            if nums[i]:
                nums[j] = nums[i]
                j += 1

        """ 将最后剩下的位置填补0 """
        for i in range(j, nums_len):
            nums[i] = 0

        print(nums)

作者: jdi146
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 jdi146 !
评论
评论
  目录