<jupyter_start><jupyter_text>移动零* Slug: move-zeroes* Date: 2018-06-28* Category: LeetCode* Tags: 数组, 算法* Author: timking* Summary: LeetCode - 探索 - 初级算法 > [原文链接](https://leetcode-cn.com/problems/move-zeroes/description/) 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。**示例:**```输入: [0,1,0,3,12]输出: [1,3,12,0,0]```**说明:*** 必须在原数组上操作，不能拷贝额外的数组。* 尽量减少操作次数。  初步解答一开始看到这个题目，首先想到的就是将 `非0元素` 与 `0` 交换, 将元素前移。代码如下:<jupyter_code>class Solution:
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        zero_id = -1
        zero_repeated = 0
        for i in range(0, len(nums)):
            if zero_id >= 0:
                if nums[i] != 0:
                    nums[i], nums[zero_id] = nums[zero_id], nums[i]
                    zero_id = i - zero_repeated
                else:
                    zero_repeated += 1
            elif nums[i] == 0:
                zero_id = i<jupyter_output><empty_output><jupyter_text>这里的思路是，记录了 `需要交换的0值` 下标，然后还记录了一个 `重复出现的0值` 次数，通过 `i值` 来确定下一个 `需要交换的0值` 下标。但是这样子还是太复杂了。。而且写代码时候因为思路不够清晰，出了很多问题。  改正参考了一下其他的人代码，发现我一开始的思路是对的，但是在实际编码中还是想的太复杂了。题目本质是将 `非0元素` 提前，那么只要遇到 `非0元素` 就将其交换，然后交换下标前移一位。这样最终遍历完成，也就得出了正确结果。更正后的代码如下:<jupyter_code>class Solution:
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        point = 0
        for i in range(len(nums)):
            if nums[i]:   
                nums[i], nums[point] = nums[point], nums[i]
                point += 1<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup